如何使用字符串文字作为宏参数?
How to use a string literal as a macro argument?
我的问题与this question相反。
我想编写一个宏来接受一个整数和一个字符串文字作为参数,如下所示:
#define STRING_MAP_ENTRY(value, name) \
{value, std::to_string(val) + " - " + name}
STRING_MAP_ENTRY(0, "ENTRY_1")
宏应该把上面的调用变成{0, "0 - ENTRY_1"}
有办法吗?我目前的尝试是这样的:
#define STRING_MAP_ENTRY(val, name) \
{ val, std::to_string(val) + "(" + name + ")" }
类似这样的方法可行:
#define STRING_MAP_ENTRY(value, name) \
{value, #value " - " #name}
STRING_MAP_ENTRY(0, ENTRY_1)
令牌前的 #
会将其字符串化。至于合并它们,相邻的字符串文字将合并为一个字符串。
为什么要使用宏?
不太好
使用这个:
auto STRING_MAP_ENTRY(int value_,string name_){
struct{int value;string name;} pair_{value_,to_string(value_)+string(" - ")+name_};
return pair_;
}
并使用它来检查它是否有效:
auto aa= STRING_MAP_ENTRY(0,string("ENTRY_1"));
cout<<aa.value<<','<<aa.name<<endl; // 0,0 - ENTRY_1
记住:
始终使用 FUNCTION 而不是 MACRO!!
我的问题与this question相反。
我想编写一个宏来接受一个整数和一个字符串文字作为参数,如下所示:
#define STRING_MAP_ENTRY(value, name) \
{value, std::to_string(val) + " - " + name}
STRING_MAP_ENTRY(0, "ENTRY_1")
宏应该把上面的调用变成{0, "0 - ENTRY_1"}
有办法吗?我目前的尝试是这样的:
#define STRING_MAP_ENTRY(val, name) \
{ val, std::to_string(val) + "(" + name + ")" }
类似这样的方法可行:
#define STRING_MAP_ENTRY(value, name) \
{value, #value " - " #name}
STRING_MAP_ENTRY(0, ENTRY_1)
令牌前的 #
会将其字符串化。至于合并它们,相邻的字符串文字将合并为一个字符串。
为什么要使用宏?
不太好
使用这个:
auto STRING_MAP_ENTRY(int value_,string name_){
struct{int value;string name;} pair_{value_,to_string(value_)+string(" - ")+name_};
return pair_;
}
并使用它来检查它是否有效:
auto aa= STRING_MAP_ENTRY(0,string("ENTRY_1"));
cout<<aa.value<<','<<aa.name<<endl; // 0,0 - ENTRY_1
记住:
始终使用 FUNCTION 而不是 MACRO!!