如何使用字符串文字作为宏参数?

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!!