Visual Studio 11ベータ版を使用していますが、クラスにstd::functionオブジェクトを格納する際に発生するコンパイルエラーについて知りたいです。
typedef std::function<void (int, const char*, int, int, const char*)> MyCallback;
私のクラスでは、
MyCallback m_callback;
これは問題なくコンパイルされます。リストにもう1つの引数を追加すると、失敗します。
typedef std::function<void (int, const char*, int, int, const char*, int)> MyCallback;
失敗は次のとおりです。
>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
これは動的にリンクされたライブラリであり、別のアプリケーションに渡すデータを準備しています。確かにデータの形式を作り直して、より少ない引数で渡すことができるようにすることはできますが、なぜこの制限が表示されるのか疑問に思いました。
c-style関数ポインタに戻り、
typedef void (*MyCallback)(int, const char*, int, int, const char*, int);
うまくいくようです。