【发布时间】:2016-07-27 13:10:30
【问题描述】:
我有两个可变参数类成员函数。
当第一个 Init(...) 被调用时,我想创建一个 std::function 到第二个类成员函数,然后将 Init(...) 的参数绑定到函数指针。
所以稍后我可以直接调用mf_(),而不必再次将所有参数传递给Reset(...)
我想避免将其设为模板类并将参数存储在元组中。
我正在尝试使以下示例工作:
#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;
}
链接到实例:http://cpp.sh/4ylm
编译时出现错误提示
模板参数推导/替换失败:17:37:
注意:无法推导出模板参数'_Result'
【问题讨论】:
-
请不要在您的问题中编辑解决方案。
标签: c++ variadic-templates variadic-functions std-function stdbind