2011-08-16 15 views
2

次の問題を遭遇したとき、私はboost :: functionで遊んでいました。関数ポインタでのboost :: functionの奇妙な動作

typedef int(*IFnPtr2)(Interface*,int,bool&); 
IFnPtr2 p = NULL; 
boost::function<int(Interface*,int,bool&)> fn; // this is fine 
boost::function<IFnPtr2> fn2; // this gives me a compile error 

同じ型を表す型と型定義で使用すると、関数が異なる動作をする理由がわかりました。私はtypedefを使わないので問題はありませんが、なぜ違いがあるのか​​不思議です。
私が使用しているコンパイラはMSVC2010です。

答えて

6

boost::functionにはない機能ポインタタイプテンプレートパラメータのための関数型を使用します。

typedef int function_type(Interface*,int,bool&); 
function_type* p = 0; // Pointer to function here 
boost::function<function_type> fn; 
+0

+1微妙に。ナイスキャッチ。 – fbrereto