我的代码很小:
#include <iostream>
#include <boost/variant.hpp>
#include <functional>
struct Test
{
void one() const { std::cout << "one\n"; }
void two(int i) const { std::cout << "two\n"; }
};
struct TestVisitor : public boost::static_visitor<>
{
template<class ... Args>
void operator()( const std::function<void (Args...)>& func) const
{
//func(args...);
}
};
int main()
{
Test test;
std::function<void ()> f = std::bind(&Test::one, &test);
typedef boost::variant< std::function<void ()>, std::function<void (int)> > fvariant;
fvariant var = f;
boost::apply_visitor( TestVisitor(), var );
return 0;
}
用可变数量的参数(注释行)调用函数对象“func”会很好。你知道最简单的实现方法吗?
编辑:TestVisitor不是最终版。随意修改它以便将参数包Args ...应用于std :: function call。
答案 0 :(得分:0)
这个答案可以帮助您将函数应用于参数包
How do I expand a tuple into variadic template function's arguments?
答案 1 :(得分:0)
我在我的博客上发布了很多内容,我玩了一两天,如果你需要更多,我可以发布我的代码: Variadic Template Treatise