私はファンクターで遊んでいます。以下の標準的な例を使用しています。
class C {
public:
template <typename Func>
void foo(Func fun)
{
fun();
}
};
struct S {
void operator()() { printf ("in S\n"); }
};
....
C myClass;
myClass.foo (S());
これはうまく機能し、foo() の呼び出しで S テンプレート型を明示的に指定する必要はありません。しかし、ファンクターをメンバー変数として保存し、後で呼び出すとします。
class C {
public:
template <typename Func>
void foo(Func fun) {
_myFunc = fun;
}
void someOtherThing() {
_myFunc();
}
private:
WHAT_IS_THIS_TYPE _myFunc;
};
クラス全体をテンプレートにする必要がありますか? もしそうなら、コンパイラは単一のファンクターで行ったようにテンプレートの型を推測できますか、それとも明示的に提供する必要がありますか? ありがとう。