我想在编译时使用boost Metaparse来解析DSL。但是出于分离方面的考虑,我不想将DSL作为一个大字符写入C++文件,而是使用预处理器(可能通过#include)在编译时从单独的文件中获取文本。

Boost meta parse文档提到了预处理器宏BOOST_METAPARSE_STRING,因此BOOST_METAPARSE_STRING("DSL content")在预处理器时间转换为metaparse::string<'D','S','L',' ', 'c','o'...>
所以代替

using input = BOOST_METAPARSE_STRING("DSL content");

我想使用类似
using input = BOOST_METAPARSE_STRING(#include "dsl.txt");

包含dsl.txt
DSL content

但是这种幼稚的方法行不通,有什么想法吗?

最佳答案

目前尚无法实现;要以可以直接在程序中使用的格式对任意文件进行#include,有必要对文件进行预处理,例如通过将其包装在原始字符串文字中,或使用xxd

(相关的)论文P1040 std::embed P1967 嵌入(又名#embed)预处理器旨在分别向C++和C预处理器添加这样的功能。如果论文被接受,则可以使用C++ 23输入语言。在此期间,https://github.com/ThePhD/embed具有gcc和clang的补丁;如果您有兴趣探索此功能,http://godbolt.org提供了gcc和clang trunk版本,并带有可在线使用的std::embed补丁。

关于c++ - 使用boost metaparse字符串解析包含的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59844966/

10-11 22:41
查看更多