Używam wersji beta programu Visual Studio 11 i jestem ciekawy błędu kompilacji, przechodzę do przechowywania obiektu std :: function w mojej klasie.Czy C++ 11 std :: function ogranicza liczbę argumentów, które może mieć wskaźnik funkcji?
typedef std::function<void (int, const char*, int, int, const char*)> MyCallback;
W mojej klasie mam,
MyCallback m_callback;
To kompiluje dobrze. Jeśli dodaję jeszcze jeden argument do listy, to się nie powiedzie.
typedef std::function<void (int, const char*, int, int, const char*, int)> MyCallback;
Niepowodzenie jest:
>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
Jest to dynamicznie powiązane biblioteki, która przygotowuje się do przekazywania danych do innej aplikacji. Mogę na pewno przerobić format danych, aby można było go przekazywać z mniejszą liczbą argumentów, ale zastanawiałem się, dlaczego widzę ten limit?
Przełączanie z powrotem do funkcji wskaźnik c stylu,
typedef void (*MyCallback)(int, const char*, int, int, const char*, int);
wydaje się działać prawidłowo.
Prawidłowa odpowiedź. Zobacz także [Magic && Secrets] (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/STL11-Magic-Secrets) autorstwa samego STL na GoingNative 2012, wspomina o tym raz lub dwa razy. – Xeo
Interesujące rzeczy. Pamiętam, że wdrażanie szablonów variadic było tylko niewielkim wysiłkiem po stronie g ++. –
Doskonale, że odpowiada na moje pytanie, dzięki! – BZor