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

Use file content as hardcoded string

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

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

最简单的方法确实是将内容复制粘贴到您的 header/implementation 文件中,但作为 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 实例 and/or 将变量声明为 inline.