テンプレート化されたメンバー関数をテンプレート パラメーターとして受け入れようとしています。
たとえば、次のクラスがあるとします。
class A
{
public:
template<typename... Args>
void Foo(Args...) {}
void Bar() {}
};
私は呼び出すことができるようにしたい:
Invoke<&A::Foo>(5, true);
そして、これは次の呼び出しに似ています。
A a;
a.Foo(5, true);
私はこれを行う方法を知っていますBar()
:
template<void (A::*F)()>
void Invoke()
{
A a;
(a.*F)();
}
int main()
{
Invoke<&A::Bar>();
}
これをテンプレート化されたメンバー関数ポインターに拡張することは可能ですか? または同様に、任意のパラメーター型を持つ関数を処理できるこのような転送関数を作成します。これは機能しませんが、次のようなものです。
template<typename... Args, void (A::*F)(Args...)>
void Invoke(Args... args)
{
A a;
(a.*F)(args...);
}
これが不可能な理由はわかりますが、もしそれが本当なら、その理由の基準を教えていただけますか? また、規格の詳細についても学習しようとしています。