1

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

当然,我可以将文件内容复制/粘贴到 andefine中,但这需要我将\s 放在每行的末尾和每行的前面"

我试图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但我想在没有额外的预构建步骤的情况下这样做。

编辑: 如何将文件嵌入到可执行文件中?专注于嵌入二进制文件。我只想将文本文件的内容用作硬编码字符串。建议的方法对于我想做的事情来说太重了。

4

1 回答 1

2

最简单的方法是将内容复制粘贴到您的头文件/实现文件中,但作为原始字符串文字,即

constexpr const char *fileContent = R"~(FILE_CONTENT_GOES_HERE)~";
//               begin raw literal: ^^^^                      ^^^ end raw literal

您应该在其中替换为文件FILE_CONTENT_GOES_HERE未修改内容。请注意,分隔符(此处:~)可以选择不同的,请参阅此处了解详细信息。

原始字符串文字是 C++11 的一项功能,它使您无需转义任何内容(引号、换行符等)。请注意,使用 C++17,您可能希望有选择地将字符串文字绑定到std::string_view实例和/或将变量声明为inline.

于 2018-10-04T09:51:48.497 回答