【发布时间】:2014-03-23 01:53:51
【问题描述】:
我正在编写一个使用预处理器元编程 Boost.Preprocessor 的库。一个宏看起来像这样:
#define MY_MACRO(my_type) return some_function<my_type>()
现在,问题是如果my_type 是void,我需要删除return。我检查了 Boost.Preprocessor,但没有看到任何可以帮助我的东西。我该如何做到这一点?比如:
#define MY_MACRO(my_type) BOOST_PP_IF(\
TYPE_EQUALS(my_type,void),return,BOOST_PP_EMPTY()) some_function<my_type>()
【问题讨论】:
-
预处理器对类型知之甚少;这将很难甚至不可能。你在处理 C++ 模板吗?如果是这样,您应该将问题重新标记为 C++,并从主题中删除 C。
-
@JonathanLeffler:我只想检查给定的标识符是否等于
void。 -
是的;我明白。这会很困难。我相信,预处理器是图灵完备的,所以它可能可以完成,但是“可以完成”和“可以明智地完成”是两个非常不同的事情。
-
为什么不使用
<type_traits>中提供的工具? -
你可能不需要做任何事情。如果函数没有返回任何内容(即返回类型为
void),那么您可以返回void类型的表达式。