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

c++ - BOOST_PP_ITERATE() 导致“没有这样的文件或目录”

我正在学习 boost 预处理器库(因为我需要使用它),我想尝试一下文件迭代机制。我用 a.cpp 和 b.hpp 建立了一个最小的项目。我正在尝试做的是通过 boost pp 多次包含 b.hpp :

当我尝试编译时(使用 -E 查看预处理器结果):

我收到了这个错误:

在 a.cpp 包含的文件中:/usr/local/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:47:37:错误:b.hpp:没有这样的文件或目录

b.hpp 在同一个目录中,我看不出我做错了什么。似乎 g++ 在与 forward1.hpp 相同的目录中搜索 b.hpp,但是按照 boost 文档,我的代码应该可以工作(我的 boost 版本是 1.44)。

有没有人遇到过同样的问题?

0 投票
2 回答
520 浏览

c++ - 如何确定 boost.preprocessor 元组中的元素计数?

如何确定boost.preprocessor元组中的元素计数?

0 投票
3 回答
354 浏览

c - 在 Boost 预处理器中混合变量和整数常量

我正在使用 BOOST_PP 在预处理器中进行预编译计算。我专注于代码大小对我来说极其重要的应用程序。(所以请不要说编译器应该通常这样做,我需要控制在编译时执行什么以及生成什么代码)。但是,我希望能够对整数常量和变量使用相同名称的宏/函数。作为一个简单的例子,我可以有

这做我想要的,评估

在编译期间。

但是,我也希望它用于

这应该被预处理为

当然,我可以通过使用传统的宏来做到这一点,比如

但是它并没有做我想让它为整数常量做的事情(在编译时评估它们)。

所以,我的问题是,是否有一个技巧来检查参数是文字还是变量,然后使用不同的定义。即,像这样:

编辑:所以我真正追求的是某种方法来检查某些东西在编译时是否可用,因此是 BOOST_PP_ 函数的一个很好的论据。我意识到这与大多数人对预处理器和一般编程建议的期望不同。但是没有错误的编程方式,所以如果你不同意它的理念,请不要讨厌这个问题。BOOST_PP 库的存在是有原因的,这个问题也是如此。不过,这可能是不可能的。

0 投票
1 回答
688 浏览

c++ - Boost 预处理器:样本不工作

我试图从Boost.Preprocessor库中编译一个示例,它是:

在 Visual Studio 2008 上,我得到了错误error C2065: 'b' : undeclared identifier

样品有问题还是我遗漏了什么?

请注意:序列定义本身是可以的。为了证明这一点,我编译了这段代码:

免责声明:此代码是 WTF 代码,我从未打算像这样使用 BOOST PP :-)

0 投票
1 回答
548 浏览

boost - 如何使用 cmake 将 boost.wave 用作预处理器

我正在尝试使用 boost.wave 作为预处理器,而不是编译器附带的预处理器。我无法弄清楚如何实现这一目标。

我使用 CMake 作为构建系统生成器,如何指定我的预处理器是 boost.wave。这应该适用于 Windows (MSVC) 和 linux (gcc)。

谷歌搜索和搜索 Stack Overflow 档案没有得到任何答案


编译器无论如何都会预处理文件。所以看起来这里涉及到两个预处理步骤。

0 投票
3 回答
7619 浏览

c - 我可以附加到预处理器宏吗?

标准 C 或 GNU 扩展中是否有任何方法可以将内容附加到宏定义中? 例如,给定一个定义为的宏,
#define List foo bar
我可以追加bas它以便List像我定义它一样扩展它
#define List foo bar bas吗?

我希望我能做这样的事情:

但我不知道如何定义Expand()宏,所以它会做我想做的事。

动机: 我正在与这些受歧视/标记的工会打交道:

我认为这是 X-macro 的好地方。如果我定义一个宏
#define quux_table X(foo) X(bar) X(bas)
,则可以这样定义枚举和结构,并且永远不会不同步:

当然,quux_*结构可能会不同步,所以我想做这样的事情,只是合法的:

(好吧,我真正想做的是,
member_struct(quux, foo) { int x; };
但我很清楚不能从宏中(重新)定义宏。)

无论如何,这是我的激励例子。有没有办法做到这一点?

Boost.Preprocessor 示例很好,如果您能告诉我如何使 X-macro 技术与该库一起工作。

0 投票
1 回答
989 浏览

boost-preprocessor - 带有 Boost.Preprocessor 的 X 宏?

将此与我关于附加到 CPP 宏的问题分开:

这里有没有人使用Boost.Preprocessor库的数据类型来实现 X 宏之类的东西?

0 投票
2 回答
1212 浏览

boost-preprocessor - Boost.Preprocessor 是独立的吗?

我正在考虑Boost.Preprocessor在某个项目中使用,但我不想让整个 Boost 库成为依赖项。

我可以单独复制它并摆脱这个吗?否则,它的依赖关系是什么?

0 投票
2 回答
282 浏览

c++ - Boost.Preprocessor 使用宏而不是简单定义的基本原理?

例如BOOST_PP_ITERATEBOOST_PP_ITERATION,正如 GMan 的 answere 所见是预处理器宏,没有任何参数。有没有理由他们不仅仅是简单的定义和使用没有()

0 投票
3 回答
291 浏览

c++ - C++ 泛型编程的精妙之处

下面的代码说明了我遇到的问题。

错误:

我试图模拟的模式是在代码/构建级别扩展程序(很像nginx模块在编译时的连接方式)。我需要构建一个可扩展的编译时结构,通过将#includes 添加到我的构建中,它是可扩展的(可插入的),这会产生一个具有唯一名称的 boost-mpl-vector,其中包含我所有的插件。因此,如果X是唯一的结束名称,则 X_0、X_1、X_2 是在向量应用了 mpl-vector 时沿途建立的名称push_back

知道boost::preprocessor 的抽象是关键,但我还不想花时间研究它,因为我正在对系统的一部分进行原型设计,最终将在编译时模块化。

所以,为了以后的参考,

  1. 为什么我在上面收到错误?
  2. 正确的原始预处理器模式应该是什么样子。
  3. 正确的 boost-preprocessor-library 模式是什么样的。