本文介绍了如何在Macro中用用户定义文字(UDL)组成字符串化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用字面后缀将标识符由#identifier
转换为MACRO中的字面量字符串?
How to use literal suffix for identifier transformed into literal string in MACRO by #identifier
?
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运算符也是常规"函数,因此您可以改为调用它们:
UDL operators are also "regular" functions, so you can call them instead:
#define STRINGIFY_AS_UDL(id) operator ""_udl(#id)
,但是您可以使用令牌粘贴运算符##
:
but you can use the token-pasting operator ##
:
#define STRINGIFY_AS_UDL(id) #id ## _udl
或相邻字符串的串联:
#define STRINGIFY_AS_UDL(id) #id ""_udl
请注意,字符串的模板UDL(gcc/clang的扩展名)将需要任何串联方法:
Note that any of the concatenation method would be required for template UDL for string (extension of gcc/clang):
// gcc/clang extension
template<typename Char, Char... Cs>
/*constexpr*/ SomeType operator"" _udl();
// Usage
// "some text"_udl
这篇关于如何在Macro中用用户定义文字(UDL)组成字符串化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!