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

时间:2011-03-31 11:52:51

标签: c++ boost c-preprocessor boost-preprocessor

例如,在GMan的回答here上看到的BOOST_PP_ITERATEBOOST_PP_ITERATION是预处理器宏,没有任何参数。是否有一个原因,他们不仅仅是简单的定义,并且在没有()的情况下使用它?

2 个答案:

答案 0 :(得分:4)

通常,像macro这样的函数可以用来防止无意的宏 扩展。
例如,假设我们有以下宏调用:

BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH )

我们希望这会扩展为BOOST_PP_ITERATION_DEPTH 但是,如果BOOST_PP_ITERATION是一个像(非功能)宏的对象, 它将在令牌之前扩展到自己的定义 BOOST_PP_ITERATION_DEPTH由连接生成。

答案 1 :(得分:1)

大概是因为他们执行操作:因此,他们的使用应该清楚地表明你实际上是调用某些东西而不仅仅是使用某些常量。