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

c++ - 如何使用 Boost Preprocessor 多次打印逗号

我需要使用可变参数宏来扩展类的多个变体。由于它们需要根据宏输入具有不同的名称,因此我不能简单地使用模板。问题是我无法扩展逗号 ( ,) 符号,并且我的类具有接受多个参数的函数(为此我需要使用逗号符号)。

boost提供BOOST_PP_COMMA()扩展为逗号的宏,但它仅适用于循环结构之外。我猜这个问题是BOOST_PP_COMMA()扩展一次然后被视为逗号,此时程序会中断。

为了说明这个问题,假设我有一个宏函数,它接受可变数量的参数并产生与给它的参数数量相等的逗号数量。天真的解决方案是这样的:

但这会产生一系列错误,因为逗号被扩展并且宏认为它们正在划分参数。

有没有办法解决这个问题?

0 投票
2 回答
1469 浏览

c++ - 如何在 BOOST_PP_IF 中展开包含逗号的宏

我之前问过以下问题,但该解决方案似乎不适用于这种特殊情况。

如何使用 Boost Preprocessor 多次打印逗号

我正在尝试有条件地扩展包含逗号的宏。这是一个说明问题的示例:

这扩展到

BOOST_PP_IIF BOOST_PP_IIF BOOST_PP_IIF BOOST_PP_IIF

当它应该扩展到

0,0 1,1 2,2 3,3

0 投票
1 回答
418 浏览

c++ - 如何将 BOOST_PP_IF 与 BOOST_PP_LPAREN 结合使用?

我正在尝试有条件地将宏扩展为“(a”或“b)”,但这样做的天真方法不适用于我正在使用的任何一个编译器(Microsoft C/C++ 和 NDK 编译器)。例子:

我究竟做错了什么?

0 投票
1 回答
231 浏览

c++ - 从可变宏参数创建成员

我正在尝试通过使用宏定义顶点基础知识并让宏最终生成与 OpenGL ( , 等) 一起使用所需的样板代码,从而在 OpenGL 中创建glGetAttribLocation顶点glEnableVertexAttribArray结构glVertexAttribPointer

我的宏定义如下:

这是我打算如何使用宏的示例:

其中第一个参数 ( bsp) 是名称前缀,所有可变参数都是类型和属性名称对。

我希望它生成一个像这样的结构定义:

但是,它似乎生成了一个空结构。我在这里做错了什么?

我不熟悉 C 宏,更不用说 Boost 宏了,因为直到现在我才真正有理由使用它们或了解是什么让它们运行起来。

任何帮助表示赞赏!

0 投票
1 回答
819 浏览

c++ - 如何计算传递给可变参数宏的宏参数的数量?

我已经大部分时间了:

在 GCC 中使用标志运行它-E会输出以下内容

3 2 1 1

当我需要的是:

3 2 1 0

我在这里做错了什么?我不打算使用boost preprocessor,但我确实需要解决方案是可变的。

任何想法如何让它发挥作用?

0 投票
1 回答
681 浏览

c++ - How do I expand all except for the first parameter to a variadic macro?

I want to have a macro MAC(...) which expands to all except the first argument passed to it. How do I achieve this?

My first thoughts were to convert the __VA_ARGS__ to a BOOST_PP_TUPLE and then do a POP_FRONT operation:

But this simply expands to

BOOST_PP_TUPLE_POP_FRONT((1,2,3))

I tried adding the BOOST_PP_EXPAND macro:

But I get the same result. What I want is an output of

2, 3

How do I achieve this?

Using templates is not an option nor is using other libraries or tools (other than boost).

0 投票
1 回答
141 浏览

c++ - 通过自定义宏构造 boost::fusion::map (以及更多)

我有一个特征类,它包含每个类在 boost::fusion::map 中的所有信号。

例子:

由于我经常需要这种特质专业化,我想要一个宏来节省我的打字时间,就像这个虚构的例子:

我怎么能实现这样的CONSTRUCT_EVENTS宏?作为起点,我查看了BOOST_FUSION_ADAPT_STRUCTBoost Preprocessor,然后查看了 Boost Preprocessor,但我还没有使用过后者,所以我希望有人可以指导我。

0 投票
1 回答
621 浏览

c++ - C ++在编译时注册类成员var

我尝试使用 boost MPL 和融合来实现类 Java 注释系统。

为什么需要它:我需要注释成员 var 以具有一些特殊的运行时功能。我在编译时将它们注册到我的基类,如下所示:

我的目标是指针和像 $REGISTER(&a,"a") 这样的文本的组合,但这是未来的目标......

Base 类处理所有必要的东西。寄存器宏创建一个融合向量:

这(在我的情况下)扩展到:

这里是问题: boost::fusion::make_list(..., "test1") 创建一个编译器错误,我不知道如何解决它。这是错误:

有人可以帮助我或有更好的主意吗?

多米尼克

0 投票
2 回答
112 浏览

c++ - 找出 .h 文件之间的 #define 语句冲突

我在 VS2013,C++ 控制台应用程序中。我在将 boost 集成到大型框架中时遇到问题。如果我尝试将它们集成到空白控制台应用程序中,它们工作正常。一旦我包含框架的“根” .h 文件(其中包括交易中的“许多”其他 .h 文件),它就会中断。这些 .h 文件“污染”了 boost 文件(以及之后包含的任何内容,结果参差不齐,不,我不能只首先包含 boost 文件,不幸的是,这并不总是一种选择)。我发现至少有一个根级#define 干扰并导致编译错误,但我找不到导致运行时问题的其他一些冲突。

具体来说,我的问题是:如何判断 .h 文件定义了哪些符号?希望以后会发生哪些冲突?我尝试使用谷歌搜索,但找不到执行此操作的工具。

或者是否有其他方法可以“隔离”它们(我的问题 .h 文件),但仍然让它们正确链接到它们在其他 .dll 中调用的函数?

0 投票
2 回答
1392 浏览

c++ - 如何使用 boost::preprocessor 解压缩序列?

如何使用 boost::preprocessor 解压缩成对序列?

例如,我有一个序列如下(逗号之间无关紧要)

并想转换为

通过使用 macor 之类的

i索引在哪里。