El siguiente código de ejemplo se compila bajo gcc y funciona como esperaría. Me permite crear una instancia de un objeto con una definición de función como parámetro de plantilla, pero luego la clase puede usar los diferentes tipos en la función como si se pasaran individualmente como parámetros de plantilla de tipo.Conversión del parámetro de plantilla no tipo de puntero de función a tipo Parámetros de plantilla
template<class FuncSignature> class Obj;
template<class Type1, class Type2> class Obj<Type1 (Type2)>
{
public:
Type1 var1;
Type2 var2;
};
int main(int argc, char **argv)
{
Obj<char (int)> A;
A.var1 = 'a';
A.var2 = 3;
}
A pesar de que parece que funciona, no estoy seguro de lo que este código está haciendo. ¿Por qué funciona este código y cumple con el estándar de C++?
sí, es legal, cuando no estoy seguro, pruebo http://www.comeaucomputing.com/tryitout/ para verificar el cumplimiento. funciona debido a la especialización de plantilla parcial. – Anycorn
Con metaprogramación, puede extraer la mayoría de la información sobre un tipo de función (aquí 'char (int)') usando la biblioteca Boost FunctionTypes: http://www.boost.org/doc/libs/1_45_0/libs/function_types/ doc/html/index.html Podría ser un código duro, pero es una lectura interesante :) –