Beschränkt C ++ 11 std :: function die Anzahl der Argumente, die ein Funktionszeiger haben kann?

Ich verwende die Beta-Version von Visual Studio 11 und bin neugierig auf einen Kompilierungsfehler, bei dem ich ein std :: function-Objekt in meiner Klasse speichere.

<code>typedef std::function<void (int, const char*, int, int, const char*)> MyCallback;
</code>

In meiner Klasse habe ich,

<code>MyCallback m_callback;
</code>

Dies kompiliert ganz gut. Wenn ich der Liste ein weiteres Argument hinzufüge, schlägt dies fehl.

<code>typedef std::function<void (int, const char*, int, int, const char*, int)> MyCallback;
</code>

Der Fehler ist:

<code>>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
</code>

Dies ist eine dynamisch verknüpfte Bibliothek, die Daten für die Weitergabe an eine andere Anwendung vorbereitet. Ich kann das Format der Daten zwar überarbeiten, damit sie mit weniger Argumenten übergeben werden können, aber ich habe mich gefragt, warum ich dieses Limit sehe.

Zurückschalten auf den c-style Funktionszeiger,

<code> typedef void (*MyCallback)(int, const char*, int, int, const char*, int);
</code>

scheint gut zu funktionieren.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage