代码之家  ›  专栏  ›  技术社区  ›  Detonar

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

  •  1
  • Detonar  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  2
  •   lubgr    6 年前

    最简单的方法是将内容复制粘贴到头文件/实现文件中,但作为 未经加工的

    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 .

    推荐文章