我正在寻找一种将文件内容用作硬编码字符串常量的简单方法。
当然我可以将文件内容复制/粘贴到define
中,但这需要我将\
放在每一行的末尾和"
的前面
我尝试使用constexpr
来使预编译器加载文件,但是我做错了什么(我对constexpr
不熟悉),或者那是不可能的。
这是我尝试过的:
constexpr const char* loadFile()
{
std::string retVar;
std::ifstream file("filename.txt");
retVar = std::string((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
return retVar.c_str();
}
#define FILE_CONTENT = loadFile();
我得到了错误:
error: body of constexpr function 'constexpr const char* loadFile()' not a return-statement
也许有人可以修改我的代码以使其按预期工作,或者有人可以用一种全新的方式来实现我的目标。
我知道我可以简单地编写一个脚本来读取文件的内容并将其转换为#define
,但是我想在没有其他预构建步骤的情况下进行操作。
编辑: How to embed a file into an executable?专注于嵌入二进制文件。我只想将文本文件的内容用作硬编码字符串。 建议的方法对于我想做的事情来说太繁琐了。
答案 0 :(得分:2)
最简单的方法是确实将内容复制粘贴到您的标头/实现文件中,但是作为 raw 字符串文字,即
constexpr const char *fileContent = R"~(FILE_CONTENT_GOES_HERE)~";
// begin raw literal: ^^^^ ^^^ end raw literal
应使用文件的未修改内容替换FILE_CONTENT_GOES_HERE
。请注意,分隔符(此处为~
)的选择可以不同,有关详细信息,请参见here。
原始字符串文字是C ++ 11的一项功能,使您不必逃脱任何内容(引号,换行符等)。请注意,在C ++ 17中,您可能需要选择将字符串文字绑定到std::string_view
实例和/或将变量声明为inline
。