如何在宏中使用用户定义的文字 (UDL) 进行字符串化?

How to compose stringification with user defined literal (UDL) in Macro?

如何使用#identifier在MACRO中将标识符转换为文字字符串的文字后缀?

struct SomeType;
SomeType operator "" _udl(const char* self);

#define STRINGIFY_AS_UDL(id) /* #id _udl doesn't work */ /* How to have "id"_udl */ 

STRINGIFY_AS_UDL(foo) // -> "foo"_udl
STRINGIFY_AS_UDL(bar) // -> "bar"_udl
STRINGIFY_AS_UDL(42)  // -> "42"_udl

UDL 运算符也是 "regular" 函数,因此您可以调用它们:

#define STRINGIFY_AS_UDL(id) operator ""_udl(#id)

但您可以使用标记粘贴运算符 ##:

#define STRINGIFY_AS_UDL(id) #id ## _udl

或相邻字符串的连接:

#define STRINGIFY_AS_UDL(id) #id ""_udl

请注意,字符串的模板 UDL(gcc/clang 的扩展名)需要任何连接方法:

// gcc/clang extension
template<typename Char, Char... Cs>
/*constexpr*/ SomeType operator"" _udl();

// Usage
// "some text"_udl