要打印结构的多个字段,我必须反复说出以下行:
cout << "field1=" << ptr->get_field1()
所以我定义了以下宏,并像这样使用它:
#define FIELD(s, id) << s"=" << ptr->get_##id()
FIELD("field1", field1);
FIELD("field2", field2);
这很有效。但我必须在宏中两次提到相同的名称 - 一次作为字符串,另一次作为变量。有没有更好的方法呢?
(这个问题的标题并不完全表明问题,但我想不出一个更合适的短语组合。抱歉!)
答案 0 :(得分:2)
这应该有效:
#define FIELD(id) << #id "=" << ptr->get_##id()
宏中的#运算符表示“将其变为字符串”。
答案 1 :(得分:2)
您应该stringify id
:
#define FIELD(id) << #id "=" << ptr->get_##id()
FIELD(field1); // << "field1" "=" << ptr->get_field1()
FIELD(field2); // << "field2" "=" << ptr->get_field2()
对于FIELD(field1)
,它部分导致了这个表达式:
"field1" "="
这是两个并排放置的文字字符串。然后连接这两个,产生相当于"field1="
的字符串。
答案 2 :(得分:0)
'#'可以解决问题:
#define FIELD(s) << #s"=" << ptr->get_##s()
甚至:
#define FIELD(i) << "field"#i"=" << ptr->get_field##i()