私は2つのvariadicクラスメンバ関数を持っています。 最初のInit(...)
が呼び出されたら、2番目のクラスメンバ関数にstd :: functionを作成し、次にInit(...)
の引数を関数ポインタにバインドします。std :: varadicメンバ関数への関数とその後のバリデーションテンプレート引数のバインド
それでは後で私は再びReset(...)
に
をすべての引数を渡すことなく、mf_()
を呼び出すことができ、私はそれをテンプレートクラスを避けるとタプルの引数を保存したいと思います。
私は、次の例を動作させるためにしようとしている:私は
テンプレート引数控除を示すエラーを取得するコンパイルするとhttp://cpp.sh/4ylm
:例生きる
#include <iostream> #include <string> #include <functional> using namespace std; class Foo { public: template<typename... T> void Init(T&... args) { cout << __func__ << endl; Print(args...); // bind args.. to Reset .. mf_ = std::bind(&Reset, args...); // mf_ = std::bind(&Foo::Reset, this, args...); ??? } template<typename... T> void Reset(T&... args) { cout << __func__ << endl; } // std::function to Reset(...) std::function<void()> mf_; private: template<typename First> void Print(First& arg) { cout << arg << endl; } template<typename First, typename... Rest> void Print(First& arg, Rest&... args) { cout << arg << " "; Print(args...); } }; int main() { int arg1 = 1; int arg2 = 2; string arg3 { "test" }; double arg4 = 1.10; Foo foo; foo.Init(arg1, arg2, arg3, arg4); //foo.mf_(); return 0; }
リンク/置換に失敗しました:17:37:
注:テンプレートパラメータ '_Result'を推測できませんでした
質問を解決しないでください。 – Barry