问题标签 [boost-fusion]

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 投票
3 回答
3703 浏览

c++ - 如何在运行时填充 boost::fusion::vector?

首先,对于与我之前的问题的相似之处表示歉意,但我认为我问的不是正确的。

我有一个方法:

它采用fusion::vector<T1, T2, T3, ..., Tn>在运行时确定的类型 - 例如vector<int, double>在一个调用和vector<int, double, int>另一个调用中。

我想用类似的东西动态填充这个向量:

这不起作用,因为 at_c 需要一个const.

我尝试了其他东西(请参阅上一个问题),但仍然无法弄清楚如何实现这一目标。

非常感谢任何帮助!谢谢。

0 投票
2 回答
1058 浏览

c++ - 如何识别增强融合向量中的类型

如何识别 boost::fusion 向量中的类型?

例如

然后是可以让我识别v[0]为 type intv[1]as typedoublev[2]as type的东西string

谢谢。

0 投票
1 回答
152 浏览

c++ - 是否可以在融合地图中嵌套融合地图?

我是新来的融合。是否可以在融合地图中嵌套融合地图?在下面的示例中,我如何编写代码以解析为 B?

0 投票
1 回答
760 浏览

c++ - 在 boost::spirit::karma 中使用 boost::fusion::map

我正在使用 boost spirit 将一些文本文件解析为一个数据结构,现在我开始从这个数据结构中生成文本(使用 spirit karma)。

对数据结构的一种尝试是 boost::fusion::map (如对 这个问题的回答中所建议的那样)。但是,虽然我可以使用 boost::spirit::qi::parse() 并轻松获取其中的数据,但当我尝试使用 karma 从中生成文本时,我失败了。

下面是我的尝试(尤其是“map_data”类型)。在阅读和尝试了其他融合类型之后,我发现了 boost::fusion::vector 和 BOOST_FUSION_DEFINE_ASSOC_STRUCT。我成功地用它们生成了输出,但它们似乎并不理想:在向量中,你不能使用名称访问成员(它就像一个元组)——而在另一个解决方案中,我认为我不需要两种方式(成员名称和密钥类型)来访问成员。

包括注释行会给出很多页面的编译错误,其中值得注意的是:从 'boost::fusion::pair' 到 'double' 的参数 1 没有已知的转换 'boost::fusion 的参数 1 没有已知的转换::pair'到'浮动'</p>

可能是 to_string 需要 map_data 的值,而不是对?虽然我不擅长模板,但我尝试通过以下方式使用变换从地图中获取矢量

但是我不知道在实例化 take_second 时我应该给出什么类型,无论如何我认为必须有一种更简单的方法来获取(迭代)地图的值(有吗?)

如果您回答了这个问题,还请就使用 ASSOC_STRUCT 还是使用地图更好地发表您的意见。

0 投票
1 回答
380 浏览

c++ - 需要使用 boost::fusion::filter_if 元函数的示例

给定 boost::fusion::vector 类型,我想过滤掉所有非 ref 成员以获得新类型。例如,这会将 boost::fusion::vector 转换为 boost::fusion::vector。我猜 boost::fusion::filter_if 元函数可能能够做到这一点,但在文档中没有使用它的例子。任何建议,将不胜感激。

0 投票
2 回答
548 浏览

c++ - 提升融合和常量正确性

我正在学习 boost fusion,并试图了解std::vector<boost::fusion::vector<int,double,double> >. 代码看起来很简单,但我似乎遇到了一些 const 问题。我显然误解了一些关于 const 的事情,并且希望有人能解释我哪里出错了。

编码:

retVal.push_back()由于转换 const 的问题,代码无法编译。我尝试了几种删除和添加一些 const 关键字的排列,但在排列编程方面没有成功,我宁愿理解我在做什么。

有人有什么想法吗?顺便说一句const,函数定义中的sumandc必须保留。

编辑:我忘了提到b填充xstd::vector<fusion::vector<int, double, double> >

EDIT2:更正的代码:

0 投票
0 回答
155 浏览

c++ - 是否可以使用 boost 来序列化和打印多态类?

是否有一种使用 boost 进行编组/解组以及带有字段名称(RTTI?)的漂亮打印结构的最小方法?似乎您可以使用boost::fusion然后以某种方式boost::serialization使用函数自动实现接口boost::fusion,但我不确定如何处理这个问题,或者是否可能。

0 投票
1 回答
805 浏览

c++ - 如何将 BOOST_FUSION_ADAPT_STRUCT 与子结构一起使用?

例如,假设我有以下结构/子结构定义:

我应该如何BOOST_FUSION_ADAPT_STRUCT使用employee_rec

0 投票
0 回答
700 浏览

c++ - 提升不同std::vectors的融合向量来实现数据框

我正在尝试在 C++ 中实现一个“数据框架”类型类(如在 S+/R 中),类似于:

我的目标是将数据作为“列向量”(而不是简单的元组向量)存储在内存中,原因与问题并不真正相关。

(假设我没有可变参数模板,而且我现在不担心参数的固定数量——我可以稍后解决这个问题)。

使用 MPL 和融合,到目前为止,我已经能够创建 std:vectors 的融合序列:

我还设法定义了一个 tuple_type,它是 boost::tuple 的特化,具有与 data_frame 相同的签名。

现在,我想定义一个允许我将 tuple_type 添加到 data_frame 的成员函数。这是我的想法:

当我编译它时(在 VS2010 C++ 上),我得到以下错误:

显然 zip 正在复制 std:vector 元素the_vectors而不是传递引用,因此push_back失败了。

有谁知道我如何让 fusion zip 传递参考而不是副本?

0 投票
2 回答
323 浏览

c++ - 如何概括精神解析器以任意顺序获取列表?

我有一个简单的解析器,可以解析整数列表或带引号的字符串。

如果我执行SIMPLE_CASE我将输入设为:

它正确解析为my_record,其中包含一个整数列表和一个 std::string 列表。

我想将此代码修改为通用代码,以便它可以以任意顺序获取零个或多个 INT 列表和零个或多个 STR 列表,并my_record以正确的顺序填充它们。我想要我的第二个更通用的测试用例:

解析为:

如果我运行,下面的代码可以正常工作:

但我不确定在运行此程序时如何让一般情况下工作:

sandbox.cpp 的代码