使用可变模板的通用访问者
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的论点?
我在博客上发布了很多关于这方面的内容,我玩了一两天,如果你需要更多,我可以发布我的代码:可变模板处理
相关文章:
- 访问者访问变体并返回不同类型时出错
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 添加调试设施以提升变体访问者
- 如何使更安全的C++变体访问者,类似于切换语句?
- 使用访问者模式检查派生类类型?
- 模板类的正向声明(访问者设计模式)
- 我可以将CRTP与虚拟函数或函数一起使用,以供访问者算法更改的访问者算法
- 使用访问者设计模式在N- ARY树中重复访问子节点值
- 如何在 C++1x 中为类层次结构实现完全通用的访问者?
- 使用 std::variant 作为类成员并应用访问者
- 带有 lambda 的内联变体访问者
- 添加无模板实例化的访问者方法
- 使用访问者中的Boost变体中的类型不编译
- 在boost BGL中使用make_bfs_visitor而不是带有bfs的派生访问者
- 单行多变量声明的clang ast访问者
- clang ast访问者,避免遍历文件
- 获取具有AST访问者clang的功能声明类型
- 提升预定义为带有参数的全局 lambda 的变体访问者
- 将静态访问者与静态多态性层次结构相耦合