问题标签 [boost-variant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1074 浏览

c++ - 迭代 std::list

循环 std::list 时如何检查对象类型?

0 投票
3 回答
13252 浏览

c++ - boost::variant 的访问者模板

我想使用 aboost.variant<T0,T1,T2>作为模板“访问者”类的参数,该类将根据 boost.variant 访问者机制的要求提供访问者运算符,在这种情况下,所有返回 void 即,

该模板还将为每个类型 T0... 在变体中具有相应的虚函数,默认情况下该虚函数不执行任何操作。用户可以从模板类继承并只重新定义他感兴趣的那些虚函数。这类似于众所周知的“模板方法”模式。我能想出的唯一解决方案是将 boost::variant 和关联的访问者包装在一个模板中,并通过 typedefs 访问它们。这工作正常,但感觉有点笨拙。这是代码:

然后按如下方式使用该类:

正如我所说,这似乎工作得很好,但如果我不必创建一个特殊的包装类来将变体和访问者联系在一起,我会更喜欢它。我希望能够直接使用 boost.variant 来实例化模板访问者类。我看过使用类型参数、非类型参数和模板模板参数,但似乎没有任何建议。我想做的事是不可能的吗?我可能会遗漏一些东西,如果有人对此有任何意见,我将不胜感激。

0 投票
2 回答
2831 浏览

c++ - C++ 模板元编程从 shared_ptr 和 boost::static_visitor 创建 boost::variant

作为个人练习,我想使用 shared_ptr 实现访问者模式。我熟悉 Robert Martin 的非循环访问者论文,但发现虚拟 accept() 的侵入性以及为每个 {X} 类创建 {X}Visitor 类的必要性令人不快。我喜欢 boost::static_visitor 类,因为它在本地封装了所有逻辑,而无需 {X}::accept() 和 {X}Visitor。

我正在寻找的是关于如何创建我在下面提到的模板函数函数rip的提示(正如我所说,我正在这样做作为练习)。我认为它应该是以下形式:

任何提示或指向做类似事情的教程将不胜感激。谢谢。

0 投票
2 回答
2378 浏览

c++ - 如何比较 boost::variant 以使其成为 std::map 的键?

如何比较 boost::variant 以使其成为 std::map 的键?似乎没有为 boost::variant 定义 operator<()

0 投票
2 回答
1372 浏览

c++ - 将 boost::mpl::list 应用于类型的模板参数

我有一个需要 boost::variant 的类,其中包含指向各种类型的共享指针,如下所示:

该类目前需要以下形式的模板参数才能编译:

如何使用 mpl 列表以便我可以为用户提供以下更简单的定义,然后在我的类实现中将其转换为上面的示例格式?

0 投票
1 回答
1406 浏览

c++ - boost::variant 递归问题

有什么办法可以使这项工作?我希望你能明白,我正在尝试通过递归对创建一个列表

0 投票
3 回答
31438 浏览

c++ - boost::variant 和 boost::any 如何工作?

boost 库中的变体和任何内容如何在内部工作?在我正在进行的一个项目中,我目前使用标记的联合。我想使用其他东西,因为 C++ 中的联合不允许您使用带有构造函数、析构函数或重载赋值运算符的对象。

我查询了任何和变体的大小,并用它们做了一些实验。在我的平台中,variant 取其最长可能类型的大小加上 8 个字节:我认为它只是 8 个字节的类型信息,其余的是存储的值。另一方面,any 只需要 8 个字节。由于我在 64 位平台上,我猜任何人都只是持有一个指针。

Any 怎么知道它持有什么类型?Variant 如何通过模板实现它的功能?在使用它们之前,我想更多地了解这些类。

0 投票
2 回答
1179 浏览

c++ - 将由 boost::variant 聚合的类型的对象传递给接受该 boost::variant 的函数

假设我有:

  1. 还行吧:

    /li>
  2. 这不会编译:

    出现错误:

    从“TypeA”类型的表达式中对“Type&”类型的引用进行无效初始化</p>

  3. 这也不能编译:

    出现错误:

    无法将参数 '1' 的 'TypeA*' 转换为 'Type*' 到 'void foo(Type*)'</p>

有没有办法通过引用(如案例 2)或指针(如案例 3)将由 boost::variant 聚合的类型之一的实例传递给接受 boost::variant 的函数?

非常感谢你!

0 投票
2 回答
1073 浏览

c++ - boost::variant 和向量中元素的打印方法

当我尝试运行此代码时,出现以下错误:

然而,作为一个字符串,它应该有一个 size() 方法。我不确定出了什么问题。请注意,将最后一行替换为:

将按预期打印“算盘”。

0 投票
1 回答
1029 浏览

c++ - boost::variant and getting data to encode for msgpack

I am using boost recursive variant to store the variant data which I want to encode using msgpack for which I need to get the raw data to pass into encode() function (see below).

I tried three different options in encode() function below but doesn't work. What are the alternates?