두 개의 가변 클래스 멤버 함수가 있습니다. 첫 번째 Init(...)
이 호출 될 때 두 번째 클래스 멤버 함수에 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 :
참고 : 템플릿 매개 변수 '_ 결과'를 추론 할 수 없습니다.
질문에 대한 해결책을 편집하지 마십시오. – Barry