问题标签 [boost-preprocessor]

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 投票
1 回答
1003 浏览

c++ - 如何将宏展开的结果分成不同的参数?

我正在写一些 Boost.Preprocessor 元程序,我有以下问题。考虑以下宏(这是为了说明问题而进行的简化):

预处理后的输出是这样的:

这表明args()没有分成多个参数。根据我对标准的理解,宏的参数在被粘贴到替换列表之前是完全展开的。因此,我期望以下扩展顺序:

那是我想要的结果。如何在不修改ITERATION_IMPL和调用本身的情况下实现它?

编辑:如果不可能(我猜是),请根据任何 C 或 C++ 标准进行解释。

0 投票
1 回答
380 浏览

boost-preprocessor - Boost.Preprocessor 是一组用于 cpp 的宏还是一个单独的处理器?

Boost.Preprocessor 是一组用于 cpp 的宏还是一个单独的处理器?

0 投票
1 回答
860 浏览

c++ - Boost.Preprocessor:BOOST_PP_TUPLE_ELEM 和 BOOST_PP_SEQ_ELEM

我的问题最好用代码来描述:

我究竟做错了什么?


嗯,谢谢

输出:

哪个是对的。但这并不能解决我的问题,因为我想使用带有 的序列BOOST_FUSION_DEFINE_STRUCT,这意味着我不能使用额外的括号。我想做这样的事情:

0 投票
3 回答
1530 浏览

c++ - 递归显式模板实例化以导出库的符号

在我之前的问题中,我问的是递归显式模板实例化可能。我看到这确实是可能的;但是,这种实例化结果证明仅在本地有效,递归实例化模板的符号不会导出到目标文件,因此不会出现在(共享)库中。所以我在这里更准确地问问题,就像我之前的帖子一样:

给定一个模板

这个模板可以像这样显式地实例化

Point<0>它将, ...的符号导出Point<3>到当前翻译单元的目标文件中。我不想像上面那样单独实例化每个模板,我想只用一个调用递归地实例化它们。

任何实现这一点的解决方案都很好,无论是模板元编程的风格,通过一个帮助类,比如

或通过预处理器。在这里,我查看了 boost 预处理器库,它似乎有一些循环结构。但是,我从未使用过 boost 预处理器库(任何建议都值得赞赏),但乍一看,我怀疑循环是否可以与显式模板实例化一起使用。

任何建议,以及为什么我想要实现的目标是不可能的解释都值得赞赏。


实际上,我有兴趣将其推广到具有多个模板参数的类,例如Node<int i1,int i2,int i3>{0,1,2,3} 中 i1,i2,i3 的所有组合。但我希望能够自己完成第二部分。像往常一样,我想通过仅在一个翻译单元中定义模板来使用显式实例化来加快编译时间,因此我需要将模板方法导出到目标文件中。

我希望有一个独立于编译器的解决方案,但如果这不可能,我需要它用于带有 g++/clang 的 Linux。


请参阅下面对我得到的解决方案以及我从中得出的最终解决方案的调查。

0 投票
1 回答
228 浏览

c - 哪个 boost 宏可以让我在程序中插入可变数量的语句

假设我想实现如下示例效果:

现在我想在我的程序中多次插入该行。如果我想将该语句插入 1000 次,那么我必须手动复制粘贴它。

目的是在程序中插入语句,而不仅仅是实现相同的逻辑行为。

我想使用一个宏,它给出一个语句并在程序中n插入语句n时间。我认为这可以使用一些 Boost 库宏。但我从未使用过 Boost,也不知道应该使用哪一个。我也仅限于C而不是 C++,但我相信这个 boost 宏也应该在C中工作。

我想用什么以及如何使用它来达到这个效果

0 投票
1 回答
345 浏览

c++ - boost::function 如何支持不同长度模板参数的模板类

我想使用 boost 预处理器来声明具有不同模板变量长度的模板类,基本上就像 boost::function 所做的那样。

上面的代码显然不会工作,因为它在同一个头文件中声明了具有不同模板变量长度的同一个类。我想要实现的是包含一个文件并定义具有不同模板变量长度的类,就像 boost::function 一样。

我查找了 boost::function 的代码,但我不知道它是如何工作的。有任何想法吗?

0 投票
2 回答
649 浏览

c++ - 可变参数序列的 C++ 模板和代码生成:如何为每个参数/类型创建类似的代码块?

我想知道我们是否可以有这样的课程(伪代码):

如果我们可以在编译时使用定义为每个提供的参数类型自动生成一个函数,例如得到类似(伪代码)的东西:

在现代 C++ 中是否可能有这样/或有点类似的事情以及如何创建它?

我想说的是:我想为从某个函数模板提供给构造函数的每个类类型生成函数。并想知道如何做这样的事情?这里展示了如何重复 ,但如何重复提供给类参数和类型?

我的意思是,如果我们知道类模板N参数N的数量NN变量)(我们将在构造函数中调用)。这里的主要问题是 - 如何解决两次或更多相同类型的问题,如何从 boost.preprocessor 中获取 args 数量,如何过滤相同类型?

0 投票
1 回答
218 浏览

c++ - `g++ -E file.cxx` 的 Visual Studio 2010 模拟是什么?

有没有,我们可以在IDE中看到结果吗?

因此,我尝试使用 boost 预处理器的代码示例,并在此处显示 (!warning - russian)

我的 IDE 是 VS2010(终极版),我想知道如何在 IDE 中看到我的代码 - 意思是我的定义变成了代码。它可以在IDE中完成,可以从VS consol完成吗?

0 投票
1 回答
906 浏览

c++ - Boost预处理器多模板类生成

我正在尝试使用 boost/preprocessor将此 C++ 代码/答案(创建 map 的类)转换为更自动化的类。string <-> some_array_of_predefined_function_types

我创建了以下代码:

以下 5 个错误无法编译:

而预处理器生成:

我想知道我做错了什么以及如何编译它?

0 投票
3 回答
430 浏览

c++ - Using boost::mpl, how can I get how many template classes are not "Empty", and call some macro with this number?

I want to call a macro with some arguments depending on the result of boost::mpl::eval_if (or a similar function) that could give how many template arguments are not empty. Say we have some pseudocode like the following:

I am trying to fill my class with some content depending on how many arguments are EmptyType. I wonder how such thing can be done in C++03 via Boost.MPL/Preprocessor or some other Boost library?