如何获取提供给value
的数据文本,而不是执行表达式的值?
#define PRINT_VALUE(value) std::cout << "Value " << __RAWTEXT(value) << " is " << value << "\n";
__RAWTEXT
是我编造的东西。那会有什么东西可以做到这一点吗?
int testVariable = 5;
PRINT_VALUE(testVariable);
这个的输出应该是
值testVariable是5
答案 0 :(得分:0)
使用“stringize”运算符#
:
#define PRINT_VALUE(value) std::cout << "Value " << #value << " is " << value << "\n";
非常简单,宏中的#TTT
会将TTT
转换为"TTT"
,这是一个字符串文字。
#define STRINGIZE2(X) #X
#define STRINGIZE(X) STRINGIZE2(X)
他们在这里行动:
#define TEST Bob
std::cout << #TEST; //results in "TEST"
std::cout << STRINGIZE2(TEST); //results in "TEST"
std::cout << STRINGIZE(TEST); //results in "Bob"
<小时/> 与你的问题无关,但值得注意的是“concat”宏操作符
##
,它“胶合”两位文本togeather。 std::st ## ing
会产生std::string
。在宏中很有用:
#define make_thing(X) \
structX##_class {
static const char* const name=#X;
};
make_thing(Foo);
std::cout << Foo_class::name;
同样,如果参数是宏,则获得宏名称。所以这是de宏宏:
#define GLUE2(X,Y) (X##Y)
#define GLUE(X,Y) GLUE2(X,Y)
#define HEY "HELLO"
#define THERE "WORLD"
std::cout << GLUE(HEY,THERE); //"HELLOWORLD"