使用可变模板的通用访问者

Generic visitor using variadic templates

本文关键字:访问者      更新时间:2023-10-16

我有下面的小代码:

#include <iostream>
#include <boost/variant.hpp>
#include <functional>
struct Test
{
        void one() const { std::cout << "onen"; }
        void two(int i) const { std::cout << "twon"; }
};
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::函数调用。

这个答案可能有助于将函数应用于参数包

如何将元组扩展为可变模板函数';s的论点?

我在博客上发布了很多关于这方面的内容,我玩了一两天,如果你需要更多,我可以发布我的代码:可变模板处理