在编译时读取文件(constexpr或其他)

时间:2019-06-13 09:19:33

标签: c++ file-io c++17 constexpr

C ++ 17是否提供任何在编译时加载/读取文件的方式?更具体地说,我想将文件的内容加载到const char*std::string_view等中。例如:

    constexpr const char* read_file_content(const char* file_path) {
        /* should read in the content of the file and return it */
        return "";
    }

    constexpr const char* file_path    = "some/folder/file.json";
    constexpr const char* file_content = read_file_content(file_path);


我遇到了2014年的这个答案https://subdomain.example.com teivaz 的解决方案使用宏和#include魔术很完美。但是,它需要更改输入文件:该文件应将其内容包含在STR(...)中,这可能并不总是可能的。

由于以上答案很老,我认为可能情况已经改变,也许C ++ 17(或可能的C ++ 20)提供了一些功能来克服此问题。

1 个答案:

答案 0 :(得分:5)

C ++ 20可能随附std::embed。看看P1040。如果降落,您可以

constexpr std::span<const std::byte> someBytes = std::embed("pathToFile");