【发布时间】:2016-10-04 00:22:00
【问题描述】:
我刚刚注意到我为this question 给出的答案实际上不起作用:
无论是否使用 CMake,以下内容都应适用于当前标准:
std::string resource = R"( #include "text.txt" )";
我认为预处理器会首先识别#include "text.txt" 语句并展开文本。
但显然不是这样的,
的结果std::cout << resource << std::endl;
是
#include "text.txt"
我尝试使用一些宏来让 #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;
}
输出是
\ #include resource_name \
是否有任何技巧可以使用预处理器或任何其他常规 c++ 语言功能将 text.txt 资源拉入 c++-11 原始字符串文字?
免责声明:
我很清楚上述示例有什么问题,以及为什么这些示例会以这种方式失败。预处理器会忽略出现在 " 对中的内容,这是一个问题。
那么有没有办法让预处理器看到这些?
【问题讨论】:
-
您想将文本分配给变量还是将文本作为预处理器指令?
-
@ThomasMatthews 应该可以从示例中所示的变量访问文本。它应该用于初始化
resource字符串。 -
不,不是不修改
text.txt。这就是为什么会有这样的讨论和提议:groups.google.com/a/isocpp.org/forum/?fromgroups#!topic/… -
我不明白你想要完成什么。您不能
#include字符串变量中的内容。 -
我认为预处理器没有办法。不过,您可以使用其他工具来做到这一点。
xxd -i可以为您做到这一点。我以前用它在二进制文件中嵌入资源文件。
标签: c++ c++11 c-preprocessor string-literals