在c++ 11中对文本块进行字符串化
Stringifying a block of text in C++11
在我正在工作的代码中有宏
#define STRINGIFY(...) #__VA_ARGS__
定义.
这样做的缺点是忽略换行符。
因此,我想定义一个使用新的R"literal( ... )literal"
格式的宏。
考虑到宏形式已经存在,我想保留使用STRINGIFY
宏
然而,考虑到有引号涉及,你将如何定义STRINGIFY
使用新的字符串文字格式?
也有保存#ifdef
s在STRINGIFY
宏?
编辑我想要一个定义宏将转换成R"literal(...)literal"
在c++ 11
Edit2 我能得到的最接近的是:
#define STRINGIFY1(a) #a
#define STRINGIFY(str) R STRINGIFY1(lit(str)lit)
这将所有正确的东西放在正确的位置,并将块压缩成一行。我开始认为宏不能在这里使用
这不是你想要的,但作为@R。Martinho Fernandes建议您可以使用原始文字:
const char *ptr = R"(
text
here
)"
不可能按照您想要的方式保留换行符,因为stringise操作符显式地丢弃了它们。在之前的任何翻译阶段都无法访问它们,在之后的翻译阶段也无法恢复它们。
(cpp。stringize]¶2[…参数的预处理标记之间每次出现空格都会在字符串字面值中变成一个空格字符。删除第一个预处理令牌之前和包含参数的最后一个预处理令牌之后的空白。[…]
您可能能够编写一个constexpr
函数,通过根据一些启发式方法发明换行符来构建修改后的字符串字面值,但您永远无法恢复原始的换行符。
相关文章:
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 在编译时检查字符串文本的长度
- 读取字符串文本输入以创建 2D 矢量
- 管理字符串文本的最佳做法
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- 无法在模板参数中定义字符串文本
- 不推荐使用 PTCHAR 的字符串文本
- C++ 字符串文本和常量
- C++20字符串文本模板参数工作示例
- 返回从字符串文本创建的静态string_view是否安全?
- 在处理任何字符大小的模板中使用字符串文本
- 是否保证相同内容字符串文本的存储相同?
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 使用C++中的模板检测不同的字符串文本
- 无法完全专用化字符串文本的模板
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 是否可以在原始字符串文本中插入转义序列?
- C++带有捕获组的正则表达式字符串文本
- 为什么多维数组中的空字符串文本衰减为空指针?