【发布时间】:2012-07-24 03:52:56
【问题描述】:
预处理器宏是否可以确定其参数是否为字符串(字面量)?
例如:
#define IS_STRING(token) ???
IS_STRING("foo") // expands to 1
IS_STRING(foo) // expands to 0
【问题讨论】:
-
你想用这些信息做什么? C++(11) 中可能有一个编译时方法。我不认为预处理器有这样的东西。
-
我正在尝试根据第一个参数是否为字符串来重载预处理器宏。不过,我刚刚意识到,我的方法是有缺陷的,因为没有什么可以阻止宏的用户声明一个命名的
const char*并传递它而不是字符串文字,在这种情况下会调用错误的重载... -
您不能重载宏。见答案here。
-
你如何让它根据 args 的数量做不同的事情?
-
C++03 是可能的,基于转换为
char*。如果它隐式转换为char*并且是char const[N]类型,则它是一个字符串文字。但是它是在编译器级别,而不是在预处理器级别。
标签: c++ macros c-preprocessor