如何在宏中使用用户定义的文字 (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
如何使用#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