は、私は、次のフリー機能とファンクタ持って想像:this answerによってdiscribedとしてテンプレートパラメータとしての関数/ファンクタ。彼らは保存することができますか?
void myFreeFunction(void)
{
cout << "Executing free function" << endl;
}
struct MyFunctor
{
void operator()(void)
{
cout << "Executing functor" << endl;
}
};
を、私は別の関数にテンプレート引数としての私の関数またはファンクタを渡すことができます。
template <typename F>
void doOperation(F f)
{
f();
}
そして呼び出します。
doOperation(myFreeFunction);
doOperation(MyFunctor());
これまでのところとても良いです。私は、次のような何かしたい場合はどう:この場合
template<typename Callback>
class MyClass
{
private:
Callback mCallback;
public:
MyClass(){}
void execute()
{
mCallback();
}
};
を私はクラスを宣言するときに、関数/ファンクタをspecifingが、後になるまで、それを呼び出していませんよ。これはファンクタのために働く:機能のための
MyClass<MyFunctor> myClass1;
myClass1.execute();
でもない:
MyClass<myFreeFunction> myClass2;
myClass2.execute();
コンパイラは言う:
エラーC2923: 'MyClassの': 'myFreeFunctionは' は有効なテンプレート型引数ではありませんパラメータ 'コールバック'の場合
どれが適切ですか。これを構造化する?
注:私はstd :: functionを認識しており、これを使用する可能性があります。しかし、私はすべての選択肢を見ています。
おかげで、
デビッド
boost :: bind()とboost :: function()を使用すると、探しているものを達成できます。興味があれば、私は例を挙げることができます。 – Lou
ありがとうございますが、最後に述べたように、私はすでにstd :: functionを解決策として認識しています。関数がインライン化されていないため、パフォーマンスのオーバーヘッドがあるようです。 – PolyVox