Uso la versión beta de Visual Studio 11 y tengo curiosidad acerca de un error de compilación. Estoy almacenando un objeto std :: function en mi clase.¿C++ 11 std :: function limita el número de argumentos que puede tener un puntero a la función?
typedef std::function<void (int, const char*, int, int, const char*)> MyCallback;
En mi clase tengo,
MyCallback m_callback;
Esto compila bien. Si agrego un argumento más a la lista, falla.
typedef std::function<void (int, const char*, int, int, const char*, int)> MyCallback;
El fracaso es:
>c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(535): error C2027: use of undefined type 'std::_Get_function_impl<_Tx>'
1> with
1> [
1> _Tx=void (int,const char *,int,int,const char *,int)
1> ]
1> f:\development\projects\applications\my.h(72) : see reference to class template instantiation 'std::function<_Fty>' being compiled
1> with
1> [
1> _Fty=void (int,const char *,int,int,const char *,int)
1> ]
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(536): error C2504: 'type' : base class undefined
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(539): error C2027: use of undefined type 'std::_Get_function_impl<_Tx>'
1> with
1> [
1> _Tx=void (int,const char *,int,int,const char *,int)
1> ]
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(539): error C2146: syntax error : missing ';' before identifier '_Mybase'
1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(539): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Esta es una biblioteca enlazada dinámicamente que se prepara datos para pasar a otra aplicación. Ciertamente, puedo volver a trabajar el formato de los datos para que se pueda aprobar con menos argumentos, pero me preguntaba por qué veo este límite.
conmutación de nuevo al puntero de función de c-estilo,
typedef void (*MyCallback)(int, const char*, int, int, const char*, int);
parece funcionar bien.
Respuesta correcta. También vea [Magic && Secrets] (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/STL11-Magic-Secrets) por el propio STL en GoingNative 2012, lo menciona una o dos veces. – Xeo
Algo interesante. Recuerdo implementar plantillas variadic siendo solo un pequeño esfuerzo en el lado g ++ de las cosas. –
Excelente, eso responde mi pregunta, ¡Gracias! – BZor