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

boost - 将多个文件预处理为单个文件

我正在尝试简化使用boost::shared_ptr(Android 和 STLport 不包括shared_ptr)的分发和构建过程。我使用 Boost'sbcp复制出shared_ptr它及其依赖项。这导致 340 个依赖项分布在众多目录中:

有没有办法预处理boost::shared_ptr成单个文件,然后将该单个文件(shared_ptr.hpp)放入我的deps/目录中?

0 投票
2 回答
476 浏览

c++ - 在编译时生成 BitCount LUT

假设我需要为 0...255 值创建一个包含预先计算的位计数值(数字中 1 位的计数)的 LUT:

如果我不想使用硬编码值,我可以使用不错的模板解决方案如何计算 32 位整数中设置的位数?

该数组在编译时完全计算。有什么方法可以避免长列表,并使用某种模板甚至宏(对不起!)生成这样的数组,例如:

笔记。这个问题不是关于在一个数字中计算 1 位,它只是作为示例使用。我想完全在代码中生成这样的数组,而不使用外部代码生成器。数组必须在编译时生成。

编辑. 为了克服编译器限制,我找到了以下基于 Bartek Banachewicz 代码的解决方案:

我知道这可能是UB...

0 投票
2 回答
1153 浏览

c++ - BOOST_PP_TUPLE_SIZE() 和空元组 '()'

我有元组序列:'(int,double)(char)()'

我需要检测元组是否为空。但是即使元组为空,BOOST_PP_TUPLE_SIZE() 也会返回 1。

请告诉我,如何检查元组不包含元素?

编辑1 示例:

0 投票
1 回答
623 浏览

c++ - BOOST_PP_REPEAT 带数组

我有这样的结构:

问:如何使用 BOOST 预处理器创建这种结构?对我来说,只有 type_A、type_B、...、type_X 类型的名称。

它需要我,因为我必须创建很多这样的结构,只更改 type_A、type_B、... 类型。

在一般情况下,我可以使用 boost 预处理器数组或集合吗?

0 投票
1 回答
1415 浏览

boost-preprocessor - 如果可变参数为空,则提升预处理器跳过

我有以下 boost 预处理器宏来生成一个函数

这很好用,除非 if__VA_ARGS__为空。经过一番搜索,我找到了一种计算__VA_ARGS__使用 BOOST_PP_VARIADIC_SIZE 参数数量的方法。经过一番思考,我写了这个宏:

我认为这应该可行,但是我不断收到以下警告

尽管这是一个警告,但它似乎仍然破坏了预处理器。传递多个参数时,它只会处理第一个参数。我觉得这很奇怪,如果打破一切都是一种奇怪的方式,怎么添加这个?我已经检查了逗号和括号一百次,但它们看起来很好。如何修复此预处理器?

http://www.boost.org/doc/libs/1_54_0/libs/preprocessor/doc/ref/if.html

编辑:这种回归似乎相关:https ://svn.boost.org/trac/boost/ticket/8606

0 投票
2 回答
1445 浏览

c++ - BOOST_PP_REPEAT 中数据的多个参数

我想使用 BOOST_PP_REPEAT(count, macro, data) 我的宏看起来像

`模板(z,n,x,y)

BOOST_PP_REPEAT (5, 模板, 4, 5)`

它抱怨 BOOST_PP_REPEAT 被传递了 4 个参数,而它只需要 3 个。有没有办法将两个参数打包到 BOOST_PP_REPEAT 的“数据”参数中。

谢谢!

0 投票
1 回答
606 浏览

c++ - 预处理器循环遍历头文件序列

是否可以包含一系列文件:file1,file2,file3 在预处理器循环中?

然后将其用于:

应该扩大到

不幸的是,上述方法不起作用,因为 #include GENERATE_FILE_NAME(n)宏中没有扩展......

这甚至可能吗?

评论:
我发布这个问题是因为我想知道这是否可能。我通过只包含一个从所有文件生成的文件解决了我的问题file1 file2 file3。我遇到了这个问题,因为有时可能会生成大的包含文件序列(不应该合并,只是因为可读性)而且我不确定如何在不明确写入所有文件名的情况下包含所有这些文件,所以我想到了预处理器循环,它到目前为止,我的解决方案当然比我的解决方案更丑:-),但它更漂亮:-)

0 投票
1 回答
221 浏览

c - 使用可变参数和后期扩展创建字符串化宏参数列表

我有以下问题 - 给定可变数量的宏参数 argX 以创建字符串化参数列表#argX

例子:

我正在使用 Boost,因此对于每个数量的参数使用辅助宏并将 LIST(...) 分派到适当的 LIST_n(arg1, ... argn) 来实现上述宏并不难。

当 LIST 的输入本身是宏时,问题就开始了。在这种情况下(如果我使用 ... 和 __VA_ARGS__),宏在被字符串化之前会被扩展,给出:

我希望它可以与 Windows 标头中定义的宏一起使用,并且大多数值都有宏(MB_OK、AF_INET、...),所以我得到的只是一个字符串化数字的列表。

不使用 __VA_ARGS__ 时一切正常:

我尝试了几个将 __VA_ARGS__ 的扩展推迟到以后的宏(例如,直到 LIST_1,它没有可变参数),但没有任何效果。

这甚至可以使用 C 预处理器来实现吗?

0 投票
1 回答
399 浏览

c++ - 连接嵌套宏结果

我有以下一组宏:

现在,我想创建另一个通用宏来评估以前的宏,我正在尝试这样做:

其背后的想法是BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)评估正确的参数计数,然后将转向正确的宏。

但是,不幸的是,我刚刚发现BOOST_PP_VARIADIC_SIZE()将在连接到 之后进行评估macro_,从而导致不需要的代码macro_BOOST_PP_VARIADIC_SIZE

有没有办法我可以先评估BOOST_PP_VARIADIC_SIZE然后连接到macro_

0 投票
1 回答
193 浏览

c++ - C++ 预处理器添加单词 if 条件

我正在编写一个使用预处理器元编程 Boost.Preprocessor 的库。一个宏看起来像这样:

现在,问题是我需要删除returnif my_typeis void。我检查了 Boost.Preprocessor,但没有看到任何可以帮助我的东西。我该如何做到这一点?就像是: