问题标签 [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 投票
0 回答
329 浏览

c++ - 如何为 C++ 函数生成包装?

我正在尝试创建一种通用的方法来包装 C++ 函数(来自不同的语言)。我有一个参数列表(和一个迭代器)和一个要在参数列表上调用的特定 C++ 函数。我试图找到某种方式将参数列表解压缩为我的函数的参数。

我目前的做法是:

  1. 使用 Boost::FunctionTypes 以序列的形式获取函数的参数。
  2. 使用参数类型的值进行转换,创建一个包含参数值的 Boost::Fusion 列表。
  3. 使用 boost::fusion 的调用使用创建的列表调用函数。

步骤 (1) 和 (2) 看起来都相当简单。但是,我不知道如何进行第二步(或者如果它甚至可能——混合编译时和运行时似乎有点奇怪)。

有没有人知道如何做第二步,或者解决这个问题的更好方法?

我知道 Boost::Python 必须做类似的事情,但是代码有点密集,以便很好地了解正在发生的事情。

更新

我有一个部分解决方案,它适用于(至少)简单的情况。处理参考仍然存在问题。

希望有人可以发布更好的解决方案。

该列表包含指向基类 A 的指针,所有其他使用的类都从该基类派生。我有两个子类 B 和 C,它们包含不同的值类型(int 和 string)。

运算符 convert 接受给定的类并获取基础值。这些值通过转换收集到一个序列中,然后将其提供给调用。

最后,调用一个函数:

0 投票
1 回答
425 浏览

c++ - 摆脱 boost::fusion 序列中的引用

我正在尝试使用 Boost::Fusion 将函数的参数类型列表转换为 fusion::list。最终,我试图将变量列表转换为可以调用函数的参数(http://stackoverflow.com/questions/11164914/generating-wrappings-for-c-functions)。

我已经让它适用于非引用变量。但是,当我尝试打开函数的参数列表时(特别是在 fusion::to_list 上它抱怨它无法取消引用迭代器)时,它无法编译非引用变量。

我在下面简化了代码:

如果 foo 定义为:

它工作正常,但它会中断:

就我的代码而言,我实际上并不需要保留在序列中的引用,我认为这是问题所在(此外,我所做的搜索倾向于指出这是罪魁祸首)。但是,我不完全确定在调用transformed之前如何剥离这些引用的功能as_list

我尝试了一些类似的东西:

但得到了相同的编译错误。

关于如何解决这个问题的任何想法?

更新

对于上面给出的两种情况,这是我得到的截断编译器错误(使用 clang++ --std=c++0x):

0 投票
2 回答
894 浏览

c++ - 在融合图中查找元素的索引

我正在努力寻找我正在寻找的一小部分功能。

我有一个包含fusion::map. 我想使用可变参数构造函数来初始化该映射中的元素。

我希望最简单的方法是fusion::vector从构造函数参数构造 a ,然后for_each在地图上调用,并将每对的值设置为向量中的相应元素。

但是,为了做到这一点,我需要根据其键类型计算该对的索引。( pair::first_type)

谁能帮我?

请看下面的示例代码:

0 投票
1 回答
1271 浏览

c++ - 使用 Boost Spirit 和 Fusion 以关联方式解析结构

我正在尝试将键值字符串解析为结构。有些键值可能不存在或者顺序不同,所以我想用它boost::fusion来调整结构,然后用at_key<>指令解析成它。

问题是代码无法编译(Boost 1.50.0,g++ 4.5.0,MinGW),显然在at_key<>规则上失败了:

如果我使用更简单的规则(没有关联性),一切都可以编译并且工作正常,但是这个解决方案有点脆弱:

为什么我不能at_key在语义动作中使用?有没有更好的方法将“关联”解析为非关联结构?

0 投票
1 回答
1055 浏览

c++ - 如何实例化没有默认构造函数的类型的 boost::fusion::vector 成员变量?

我正在学习 boost::mpl 并且我有以下课程-

这很好用,只要我使用带有默认构造函数(或默认类型)的类型

但是,如果我使用没有默认构造函数的类型,则会引发编译器错误,因为向量初始化失败。有没有一种标准方法来正确初始化成员(在构造函数中)而不诉诸指针/引用?

0 投票
1 回答
361 浏览

c++ - C++:使用 fusion::at 时出现 BOOST_FUSION_ADAPT_STRUCT 错误

在 Boost.Fusion 文档中,它说 BOOST_FUSION_ADAPT_STRUCT 使结构成为完全兼容的 Boost.Fusion 随机访问序列。
我尝试了以下方法:

我从编译器收到一个错误,说“没有匹配的函数调用 at(Str&)”。
我使用的编译器是 g++。
我究竟做错了什么?
提前致谢。

0 投票
2 回答
8608 浏览

c++ - C++ 使用 boost fusion adapt_struct 迭代到嵌套结构字段

两个stackoverflow 答案建议使用 fusion adapt_struct 迭代结构字段的方法。这种方法看起来不错。但是,如何迭代到本身就是结构的字段?

按照前面的答案,我想出了下面的代码。问题在于代码无法编译的“#if 0”子句。作为替代解决方案,我创建了“decode()”函数来获取指向目标参数的 void 指针。这可行,但在编译时会丢失类型信息。有更好的解决方案吗?

我在维基百科上看到,您可以使用 typeid 和 dynamic_cast,而不是传递类型字符串“intype”。但这只会是很小的改进。我正在寻找一种更适合 C++ 或增强语言设计的解决方案。

0 投票
1 回答
123 浏览

c++ - fusion::nview 和 const 令人头疼

我已经被困在代码中一段时间​​了。我可以解决这个问题,但如果我什至无法编译代码,我会感到非常糟糕。代码中描述了这些问题。

请任何人都可以指出我错过了什么。

0 投票
1 回答
692 浏览

c++ - 包装一个 Boost.Fusion 序列

我正在寻找一种方法来创建一个Boost.Fusion序列包装器,它本身就是一个Fusion序列,并将所有“调用”转发到它的包装序列。有点像

wheresequence_wrapper< Sequence >也是一个Fusion序列,并且可以正常工作Sequence。我需要这个的原因是我有几个在Fusion序列上运行的函数(其中所有元素都满足一些特殊要求),并且我想添加一些语法糖,我需要一个自定义类型来添加重载运算符。我也不需要对 sequence_wrapper 的操作结果来返回一个 sequence_wrapper,只有与语法糖相关的调用会返回一个(手动)包装的序列。例如,使用逗号运算符将元素附加到序列(有点像Boost.Assign for Fusion序列):

实现这一目标的最佳方法是什么(如果图书馆确实支持它)?我特别想避免从头开始创建Fusion序列,因为我想使用Fusion操作返回的任何序列。继承+特化tag_of返回包装序列的标签是否有效?还是我需要定义自己的标签并实现所有必需的功能来转发呼叫?

0 投票
4 回答
2348 浏览

c++ - 迭代 Boost fusion::vector

我正在尝试使用以下方法迭代 boost::fusion 向量:

distance cout 语句给了我一个有限的长度 (2),但是循环似乎无限期地运行。

非常感谢任何建议!