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

haskell - Haskell 相当于 Boost.Fusion

我一直在尝试使用 GADT 在 Haskell 中创建一个完全类型化的 DSEL,例如一个完全类型安全的 AST,似乎做一个正确类型化的编译器需要诸如从 Haskell 类型到类型和值(类型化环境)的映射之类的构造并且可以通过 Haskell 类型系统来理解。C++ 的 Boost.Fusion 库具有类似的结构(类型-> 值映射、类型化值的向量等)。Data.Tuple 负责处理序列,但是是否有 Haskell 版本的东西,例如 Boost.Fusion maps?

0 投票
1 回答
581 浏览

c++ - fusion::vector + fusion::push_back = fusion::vector?

我 typedef 一个带有两个元素的向量。然后我将另一个元素 push_back 放入其中,并期望结果类型也是向量。但事实并非如此。

例子:

http://liveworkspace.org/code/361492801eebe24cc5679a1e899a5240

我究竟做错了什么?

问候。

0 投票
1 回答
257 浏览

c++ - 如何找出nviews向量的返回类型

我有以下问题:

预期的是 T 是一个正向序列序列(例如 boost::fusion::vector),我想查看 T 的每个元素中的第 N 个元素。但是,我事先不知道 的类型boost::fusion::vector,例如 boost::fusion::vector<int, double>boost::fusion::vector<int, double, std::string>。在代码中我可以找出正确的类型,但我无法在函数声明中找出这一点。

谢谢 !

也欢迎任何有关代码改进的建议。:)

0 投票
2 回答
633 浏览

c++ - 从另一个序列初始化 Boost.Fusion 序列的元素

我有一个 Boost.Fusion 元素序列,每个元素都需要用另一个序列的元素进行初始化。当我不使用 Fusion 时,它看起来像:

我用融合向量实现这一点的唯一想法是

在这个想法中,magic_functor将有一个结果类型Bifor anAi并在其中执行构造operator()。但是,magic_functor必须知道要转换为的正确类型,这将导致重复的逻辑。

有没有更好的方法来融合初始化?

0 投票
0 回答
268 浏览

c++ - issues with const correctness using boost::fusion::map

I'm writing some classes that use boost::fusion::map. Bellow you find a simplified code:

and another class:

Look for "PROBLEM!" in the comments in the above code. In that method, the compiler ignores the const qualifier of the method and calls the non-const version of obj_m.get() allowing to do something like:

which is not correct since this method is const! Then, to force the compiler to call the const version, a const reference to obj_m is declared. Now the sentence

produces a compilation error. So far this is not a problem for the current method,but it is not convenient for const correctness and it is definitively undesired

any idea why is this happening? thanks!

0 投票
0 回答
1498 浏览

c++ - 如何将 fusion::at_c 或 fusion::at_key 应用于 fusion::filter_if 的结果?

我在一个项目中使用 boost::fusion。这是我第一次使用它,事情变得越来越复杂。玩弄我写了以下程序:

如您所见,它非常简单。它工作正常,除非我取消注释后面跟着“错误”的两行。如果我取消注释第一个,我会收到以下错误:

如果我取消注释第二个,那么我得到:

根据filter_if 在线文档,它返回正向序列的模型(即向量的情况)或关联序列的模型(即映射的情况)。因此,给出错误的两条线应该可以正常工作。我猜我在这里遗漏了一些明显的东西(也许是一个包含?),但我无法让它工作。

在此先感谢您的帮助

0 投票
1 回答
336 浏览

c++ - 用异构 boost::fusion 向量类型数据填充 std::vector

我是提升和元编程的新手,所以我的问题是:

对于大多数人来说,这可能是一个非常愚蠢的问题,但为什么不能编译呢?我是否需要以某种方式将 my_row 向量转换为可以存储到普通 std::vector 中的东西?

也有人可以向我指出一本关于元编程和提升的很好的介绍性书籍,以便我了解提升使用背后的心态和一些使用提升的编程示例?

我真的认为在线手册网站绝对是垃圾。至少对于那些对 C++ 和 STL 不完全陌生但在 'struct' 声明以及 '::' 和 '<>' 使用的分数中迷失的人来说,它看起来是这样的。一般来说,所有让新手难以使用和理解的东西。

0 投票
1 回答
350 浏览

c++ - 从融合向量的标准向量返回列,不复制

我有一个由 a 表示的“表格”,std::vector其中每个元素都是 a boost::fusion::vector。我需要将此表的“列”的表示形式返回为 a std::vector,而不复制任何值。这样做的最佳方法是什么?我正在尝试构建一个std::vectornviews ,其中 n 是列号,但它似乎不起作用。我是在正确的轨道上还是有其他方法可以解决这个问题?

0 投票
0 回答
696 浏览

c++ - 时间:2019-05-10 标签:c++boostmpl/fusionvectorsdynamicpush_back

我是 TMP 世界的新手,我需要一些关于在 boost mpl 或融合中使用向量的帮助。

所以情况如下:

我在多线程环境中有一个用于异步函数调用的 API,它被实现为运行时库,例如:async_call(function_ptr, arg1, arg2, ... argN); 函数具有可变数量的参数。

所以应用程序的代码如下所示:

该库将参数值存储在一些内部数据结构中,并在未来某个时间执行由库确定的函数。为了实现一些优化,我需要知道特定应用程序的所有可能不同数量的参数并填充包含参数数量的 const 数组:因此在编译期间需要填充类似的内容:

我已经将 async_call 实现为可变参数模板函数,并且在内部我使用一些模板元编程计算每个提交函数的参数数量(count_args<...>

问题来了:我可以用 count_args<...> 结果填充全局 MPL 或 FUSION 向量,然后将其转换为 const 数组吗?

我已经看到一些代码建议使用 boost 预处理器从 MPL 向量生成 const 数组,如下所示:

所以我在全局声明了一个 mpl 向量:

并尝试从 async_call 函数(从 main 调用)中 push_back,如下所示:

然而,向量没有得到更新,因为我必须以某种方式用 push_back 返回的新序列“更新”argsTable!我可以这样做吗?MPL 足够还是我需要融合?

任何其他解决方案的建议都非常受欢迎!

0 投票
1 回答
781 浏览

c++ - Boost Fusion 调用和 SFINAE

我想根据boost::fusion::invoke()特定的融合序列是否有效来实现部分类模板专业化。但在这种情况下,替换失败似乎是一个错误。

我想我需要一个is_callable_with_these_sequence_parameters<F, Seq>有效的元函数。任何人都可以帮忙吗?