我想从动作成员函数中调用此foo函数,而不是构造函数 为此,我必须将值存储在某处 我无法弄清楚这样做的语法。
#include <iostream>
void foo(int a, int b)
{
std::cout<<a<<b;
}
template<typename... Args>
struct Foo
{
public:
Foo(Args... args){foo(args...);}
void action(){}
private:
//Args... ?
};
int main()
{
Foo<int,int> x(1,2);
}
答案 0 :(得分:4)
您可以使用Foo
和std::function
放弃std::bind
的模板化:
#include <functional>
#include <iostream>
void foo(int a, int b)
{
std::cout<<a<<b;
}
struct Foo
{
public:
template<typename... Args>
Foo(Args&&... args)
// bind the arguments to foo
: func_(std::bind(foo, std::forward<Args>(args)...)) { }
// then you're able to call it later without knowing what was bound to what.
void action(){ func_(); }
private:
std::function<void()> func_;
};
int main()
{
Foo x(1,2);
x.action();
}
编辑:要回答评论,要绑定构造函数我会使用像
这样的函数模板template<typename T, typename... Args> T *make_new(Args&&... args) {
return new T(std::forward<Args>(args)...);
}
然后
std::bind(make_new<SomeClass, Args...>, std::forward<Args>(args)...)
重要样式注释:考虑绑定到std::make_shared
或std::make_unique
(如果您可以使用C ++ 14),以免费获得智能指针的好处。