问题标签 [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.
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)。
有没有人遇到过同样的问题?
c - 在 Boost 预处理器中混合变量和整数常量
我正在使用 BOOST_PP 在预处理器中进行预编译计算。我专注于代码大小对我来说极其重要的应用程序。(所以请不要说编译器应该或通常这样做,我需要控制在编译时执行什么以及生成什么代码)。但是,我希望能够对整数常量和变量使用相同名称的宏/函数。作为一个简单的例子,我可以有
这做我想要的,评估
在编译期间。
但是,我也希望它用于
这应该被预处理为
当然,我可以通过使用传统的宏来做到这一点,比如
但是它并没有做我想让它为整数常量做的事情(在编译时评估它们)。
所以,我的问题是,是否有一个技巧来检查参数是文字还是变量,然后使用不同的定义。即,像这样:
编辑:所以我真正追求的是某种方法来检查某些东西在编译时是否可用,因此是 BOOST_PP_ 函数的一个很好的论据。我意识到这与大多数人对预处理器和一般编程建议的期望不同。但是没有错误的编程方式,所以如果你不同意它的理念,请不要讨厌这个问题。BOOST_PP 库的存在是有原因的,这个问题也是如此。不过,这可能是不可能的。
c++ - Boost 预处理器:样本不工作
我试图从Boost.Preprocessor库中编译一个示例,它是:
在 Visual Studio 2008 上,我得到了错误error C2065: 'b' : undeclared identifier
样品有问题还是我遗漏了什么?
请注意:序列定义本身是可以的。为了证明这一点,我编译了这段代码:
免责声明:此代码是 WTF 代码,我从未打算像这样使用 BOOST PP :-)
boost - 如何使用 cmake 将 boost.wave 用作预处理器
我正在尝试使用 boost.wave 作为预处理器,而不是编译器附带的预处理器。我无法弄清楚如何实现这一目标。
我使用 CMake 作为构建系统生成器,如何指定我的预处理器是 boost.wave。这应该适用于 Windows (MSVC) 和 linux (gcc)。
谷歌搜索和搜索 Stack Overflow 档案没有得到任何答案
编译器无论如何都会预处理文件。所以看起来这里涉及到两个预处理步骤。
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 技术与该库一起工作。
boost-preprocessor - 带有 Boost.Preprocessor 的 X 宏?
将此与我关于附加到 CPP 宏的问题分开:
这里有没有人使用Boost.Preprocessor库的数据类型来实现 X 宏之类的东西?
boost-preprocessor - Boost.Preprocessor 是独立的吗?
我正在考虑Boost.Preprocessor
在某个项目中使用,但我不想让整个 Boost 库成为依赖项。
我可以单独复制它并摆脱这个吗?否则,它的依赖关系是什么?
c++ - Boost.Preprocessor 使用宏而不是简单定义的基本原理?
例如BOOST_PP_ITERATE
和BOOST_PP_ITERATION
,正如 GMan 的 answere 所见,是预处理器宏,没有任何参数。有没有理由他们不仅仅是简单的定义和使用没有()
?
c++ - C++ 泛型编程的精妙之处
下面的代码说明了我遇到的问题。
错误:
我试图模拟的模式是在代码/构建级别扩展程序(很像nginx模块在编译时的连接方式)。我需要构建一个可扩展的编译时结构,通过将#include
s 添加到我的构建中,它是可扩展的(可插入的),这会产生一个具有唯一名称的 boost-mpl-vector,其中包含我所有的插件。因此,如果X
是唯一的结束名称,则 X_0、X_1、X_2 是在向量应用了 mpl-vector 时沿途建立的名称push_back
。
我知道boost::preprocessor 的抽象是关键,但我还不想花时间研究它,因为我正在对系统的一部分进行原型设计,最终将在编译时模块化。
所以,为了以后的参考,
- 为什么我在上面收到错误?
- 正确的原始预处理器模式应该是什么样子。
- 正确的 boost-preprocessor-library 模式是什么样的。