将文件内容用作硬编码字符串

时间:2018-10-04 09:45:38

标签: c++ g++ precompiler

我正在寻找一种将文件内容用作硬编码字符串常量的简单方法。

当然我可以将文件内容复制/粘贴到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?专注于嵌入二进制文件。我只想将文本文件的内容用作硬编码字符串。 建议的方法对于我想做的事情来说太繁琐了。

1 个答案:

答案 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