Estoy intentando crear una clase de plantilla que almacene un puntero a una función de plantilla, pero me encontré con un error de compilación en Visual Studio 2008. Creé un caso de prueba simplificado para ello (ver más abajo) que aún no se compila en VS2008, pero pareció compilarse con éxito en el Comeau en línea y en los compiladores de GCC en línea que probé.Error de compilación con función de puntero a plantilla en Visual Studio 2008
El error que estoy viendo es:
error C2436: 'func' : member function or nested class in constructor initializer list
temp.cpp(21) : while compiling class template member function 'test_class<T>::test_class(T (__cdecl &))'
1> with
1> [
1> T=int (const int &)
1> ]
La misma prueba utilizando una plantilla no funciona la función. A falta de eso, ¿alguien sabe una solución para el problema, o si VS2008 espera algún tipo de sintaxis diferente para esto?
Gracias,
Jerry
template<class T>
T template_function(const T& arg)
{
return arg;
}
int non_template_function(const int& arg)
{
return arg;
}
template<class T>
class test_class
{
public:
test_class(const T& arg) : func(arg) {}
private:
T func;
};
template<class T>
void create_class(const T& arg)
{
new test_class<T>(arg);
}
int main()
{
create_class(&template_function<int>); //compile fails unless this is commented out
create_class(&non_template_function);
return 0;
}
+1 para la pregunta, bien escrito, buen ejemplo de trabajo mínimo. No se puede responder con autoridad pero __cdecl en el mensaje de error establece el timbre de alarma con respecto a la vinculación. – Flexo