Tengo una clase A que tiene un parámetro de plantilla T. Hay casos de uso donde la clase T ofrece una función func1() y hay casos de uso donde T doesn no lo ofrezco Una función f() en A debería llamar a func1(), si existe. Creo que esto debería ser posible con boost mpl, pero no sé cómo. Aquí algunos pseudo-código:Boost MPL: Llame a una función (miembro) solo si existe
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
Aún mejor sería una cosa de los casos:
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;
}
};
Incluso si logra encontrar una condición adecuada, ese código no se compilará. Ambas ramas de if deben compilarse, y si la función no existe, la rama verdadera no compilará. –
Con la especialización de plantillas, no es necesario compilar ambas partes. De alguna manera tendría que llamar a una función de plantilla con el parámetro T y esta función tiene un comportamiento diferente cuando T ofrece o no ofrece func1(). Estoy seguro de que boost mpl ofrece algo para este caso de uso. Simplemente no sé cómo usarlo. – Heinzi
¿Es C++ 11 una opción? –