相关疑难解决方法(0)

将具有显式转义序列的字符串转换为相对字符

我需要一个函数将"显式"转义序列转换为相对不可打印的字符.ES:

char str[] = "\\n";
cout << "Line1" << convert_esc(str) << "Line2" << endl:
Run Code Online (Sandbox Code Playgroud)

会给出这个输出:

Line1

Line2
Run Code Online (Sandbox Code Playgroud)

有没有这样做的功能?

c++ escaping

11
推荐指数
2
解决办法
2万
查看次数

有没有办法使用预处理器将文本资源拉入原始字符串文字?

我刚刚注意到我为这个问题给出的答案实际上不起作用:

无论是否使用 CMake,以下内容都适用于当前标准:

std::string resource = R"(
#include "text.txt"
)";
Run Code Online (Sandbox Code Playgroud)

我认为预处理器会首先识别#include "text.txt"语句并扩展文本。

但显然事实并非如此,结果为

std::cout << resource << std::endl;
Run Code Online (Sandbox Code Playgroud)

#include "text.txt"
Run Code Online (Sandbox Code Playgroud)

我尝试使用一些宏来让#include语句在其中展开,但它也不起作用:

#include <string>
#include <iostream>

#define RESOURCE_DEFINIION(resource_var,resource_name) \
    const std::string resource_var = R"xxx( \
    #include resource_name \
    )xxx";

RESOURCE_DEFINIION(resource,"text.txt")

int main()
{
   std::cout << resource << std::endl; 

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

\                                                                                                                                                                                          
    #include resource_name \                                                                                                                                                                
Run Code Online (Sandbox Code Playgroud)

这是要玩的演示


是否有任何技巧可以text.txt使用预处理器或任何其他常规 C++ 语言功能将资源提取到 c++-11 原始字符串文字中?


免责声明:

我很清楚上述样本有什么问题,以及为什么会以这种方式失败。预处理器忽略出现在"成对中的东西是一个问题。

那么有没有办法让预处理器看到这些?

c++ string-literals c-preprocessor c++11

5
推荐指数
1
解决办法
1362
查看次数

标签 统计

c++ ×2

c++11 ×1

c-preprocessor ×1

escaping ×1

string-literals ×1