Tôi có lớp A có tham số mẫu T. Có trường hợp sử dụng lớp T cung cấp hàm func1() và có trường hợp sử dụng T không không cung cấp nó. Một hàm f() trong A nên gọi func1(), iff nó tồn tại. Tôi nghĩ rằng điều này nên có thể với mpl tăng, nhưng tôi không biết làm thế nào. Dưới đây một số mã giả:Tăng MPL: Chỉ gọi hàm (thành viên) nếu nó tồn tại
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
Thậm chí tốt hơn sẽ là một người khác hợp cụ thể:
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
else
cout << "func1 doesn't exist" << endl;
}
};
Ngay cả khi bạn quản lý để tìm điều kiện thích hợp mà mã sẽ không biên dịch. Cả hai nhánh của if phải biên dịch, và nếu hàm không tồn tại, nhánh thực sẽ không biên dịch. –
Với chuyên môn mẫu, không cần thiết cả hai phần biên dịch. Bằng cách nào đó tôi sẽ phải gọi một hàm mẫu với tham số T và hàm này có một hành vi differend khi T cung cấp hoặc không cung cấp hàm func1(). Tôi chắc chắn tăng mpl cung cấp một cái gì đó cho trường hợp sử dụng này. Tôi chỉ không biết cách sử dụng nó. – Heinzi
Có phải tùy chọn C++ 11 không? –