Mam klasy A, która ma parametr szablonu T. Istnieją przypadki użycia, gdzie klasa T oferuje funkcję func1() i są przypadki użycia, gdzie T doesn nie oferuj tego. Funkcja f() w A powinna wywoływać func1(), iff istnieje. Myślę, że powinno to być możliwe dzięki boost mpl, ale nie wiem jak. Oto niektóre pseudo kod:Zwiększ MPL: wywołanie funkcji (członek) tylko jeśli istnieje
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
Jeszcze lepiej byłoby inaczej-case:
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;
}
};
Nawet jeśli uda Ci się znaleźć odpowiedni warunek, że kod się nie skompiluje. Obie gałęzie if muszą się kompilować, a jeśli funkcja nie istnieje, prawdziwa gałąź nie będzie się kompilować. –
Ze specjalizacją szablonu nie jest konieczne kompilowanie obu części. W jakiś sposób musiałbym wywołać funkcję szablonu z parametrem T i ta funkcja ma zachowanie różnic, gdy T oferuje lub nie oferuje func1(). Jestem pewien, że boost mpl oferuje coś dla tego przypadku użycia. Po prostu nie wiem, jak z niego korzystać. – Heinzi
Czy C++ 11 jest opcją? –