问题标签 [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 回答
78 浏览

c++ - 为什么这个 PP_ARG_COUNT 宏需要一个 PP_EXPAND?

我已经在 Visual Studio 2013 下编译了这段代码,它输出:

为什么这个宏需要一个 PP_EXPAND,而 PP_ARG_COUNT2 它不能正常工作?

0 投票
4 回答
2103 浏览

c++ - 我们可以实现一个 max 或 min 宏,它可以接受可变参数(超过两个参数)

我想实现一个新的 max/min 宏,它可以接受两个以上的参数,例如:

然后,我可以像这样使用它:

如果这个宏可以帮助我们实现那个宏?

0 投票
1 回答
288 浏览

c++ - Boost.preprocessor:BOOST_PP_EQUAL 不工作

您好,我在 C 中遇到了 Boost.Preprocessor 的问题。我相信 C++ 和 C 宏的行为完全相同,因此在 C 中使用 Boost.Preprocessor 很好,无论如何我打算做一个小的完全预处理器库。我的问题是我无法使用BOOST_PP_EQUAL. 这是您可以构建的示例代码:

我正在使用 clang 和 gcc 并且都告诉我宏 BOOST_PP_NOT_EQUALS 不存在!

我的代码有什么问题?提前致谢 !

-E编辑:这是使用标志的非宏行。

有没有搞错 ?

0 投票
1 回答
611 浏览

c++ - Varadiac 宏,用于对类进行不同的偏特化

对于某些类,我们可以定义执行显式模板特化的宏作为 Boost 序列化库中的以下示例:

这适用于完全专业化,例如BOOST_IS_BITWISE_SERIALIZABLE(MyClass<int>)

但我想创建一个方便的宏,它适用于具有不同参数的部分专业化,如下所示:

我试图通过 Boost PreProcessor 文档来解决这个问题,但无法进行很多。是否有针对此的 Boost PreProcessor 解决方案?

0 投票
1 回答
157 浏览

boost-preprocessor - Boost-pp:如何判断一个宏参数是否为元组

元组是用括号括起来的逗号分隔列表,例如

如果我有

我想要ISTUPLE(nope)解析为 0 并ISTUPLE((yep))解析为 1 的内容。

[FWIW,我已经_RTFM_了很多。]

0 投票
1 回答
578 浏览

c++ - 如何使用 boost 预处理器来运行一系列函数?

例如,我有一系列具有相同两个参数类型的函数 f1、f2 等。我想使用宏

用结果运行函数序列

我认为 boost 预处理器可以提供帮助。我试过了

但是失败了。怎么做?

找到如下答案

这种技术也适用于调用一系列宏。

0 投票
1 回答
2364 浏览

c++ - 如何使用 boost 预处理器生成访问器?

例如

变得像

请使用 boost 预处理器序列来执行此操作,因为此宏将与其他已经使用 boost 预处理器序列的现有宏组合。

0 投票
1 回答
191 浏览

c++ - C ++ MACROS:条件代码包含在表达式NOT语句中

好的,我知道宏是邪恶的,应该不惜一切代价避免。我正在尝试减少重要的样板代码和重复,如果我不能将其宏化,就很难不犯错字。

这是一个有些人为的例子,因为我试图将我必须的真实代码简化为一个更简洁的例子。

这将正确扩展在 BINDIF 宏中找到的 std::bind 代码。但是,请注意第一个参数,即条件,设置为 1。如果我将此值更改为 0,它会正确地下降值 nullptr。问题是我希望在评估传递给 BINDIF 宏的“方法”参数时发生这种情况。我想在表中输入 nullptr 值,因此不会生成 std​​::bind 代码。

我完全知道这个例子看起来是多么做作,但是在我使用的实际代码中,大多数列都包含 nullptr,因为我稀疏地绑定到 4 个 std::function 指针之一。

这是1的扩展:

这是 0 的展开式:

请原谅任何错别字和这个问题的总长度。我在过去几天在这里和其他地方搜索了答案,但找不到任何似乎有效的东西。Boost 的宏文档非常少。

大声笑,当然。带有如下 nullptr 的表:

会产生如下代码:

0 投票
1 回答
58 浏览

c - 将 BOOST_PP_DEC 传递给另一个宏

我正在尝试完成类似的事情:

所以说FOO( 2 ) = Bar2_Bar1

问题出在N-1那儿。预处理器不会做这样的数学运算,但是 boost 有方便的 BOOST_PP_DEC 宏来减少输入。

因此,如果我现在尝试以下操作:

我本来希望它可以工作,但它实际上直接粘贴了宏名称并且不评估它。

奇怪的是,如果我这样做:

它似乎工作。我到底在这里错过了什么?

0 投票
1 回答
212 浏览

c++ - 如何多次附加到宏?

使用boost preprocessor图书馆我可以做这样的事情:

但是我该如何多次执行此操作?假设我想push_back不止一次,在我的代码的不同部分,然后显示结果?

下面的代码只是打印出来dummy