C++ constexpr C++;集装箱–;将\推回初始值设定项\列表或类似项的方法

C++ constexpr C++;集装箱–;将\推回初始值设定项\列表或类似项的方法,c++,stdvector,initializer-list,stdarray,string-view,C++,Stdvector,Initializer List,Stdarray,String View,这个函数像shell(bash、ksh、fish)一样将输入行解析为参数。即,查找由空格或制表符分隔的输入字符串部分: auto parse_args(string_view const& line){ vector<string_view> args; size_t pos_begin = 0, pos_end = 0; int i = 0; while (pos_end < line.size() && pos_end

这个函数像shell(bash、ksh、fish)一样将输入行解析为参数。即,查找由空格或制表符分隔的输入字符串部分:

auto parse_args(string_view const& line){
    vector<string_view> args;
    size_t pos_begin = 0, pos_end = 0;
    int i = 0;
    while (pos_end < line.size() && pos_end != string_view::npos) {
        pos_begin = line.find_first_not_of(" \t", pos_end);
        if (pos_begin == string_view::npos)
            break;
        pos_end = line.find_first_of(" \t", pos_begin);
        if (pos_end == string_view::npos)
            pos_end = line.size();
        args.emplace_back(line.substr(pos_begin, pos_end - pos_begin));
        i++;
    }
    return args;
}
自动解析参数(字符串视图常量和行){
向量args;
大小\u t位置\u开始=0,位置\u结束=0;
int i=0;
while(pos_end
结果是将一组视图转换为输入字符串-
向量
。输入未更改。
查看C++17的
string\u视图
我发现大多数函数都是
constepr
。在我的函数中,仅在运行时执行
vector::push_back()
。所以我解决了让
parse_args()
constexpr
,需要用constexpr容器替换
std::vector

我寻找了一种附加到
初始值设定项列表
的方法,或者更好的说法是在前一个列表的基础上创建新的初始值设定项列表,但没有成功。
请建议一种方法“推回”到
初始值设定项列表
std::array
或类似的constexpr容器。我不寻找任何大型的第三方库。

因为它是在命令行args上运行的,所以使用这个constexpr几乎没有什么好处。如果它真的与非
constepr
char*
s一起使用,那么无论如何都不可能调用它

对于大多数应用程序代码来说,对于
constexpr
来说,走得太远可能是多余的


也就是说,您可以定义一个具有指定上限(比如1000)的
std::array
,并假设您没有溢出。

因为这是在命令行参数上运行的,所以使用这个constexpr几乎没有什么好处。如果它真的与非constepr
char*
s一起使用,那么无论如何都不可能调用它

对于大多数应用程序代码来说,对于
constexpr
来说,走得太远可能是多余的


也就是说,您可以定义一个具有指定上限(比如1000)的
std::array
,并假设没有溢出。

我认为您无法将此函数转换为constexpr。这要求参数在编译时是已知的。@user7860670参数在编译时是已知的。这就是为什么我想把它转换成constexpr。但是在你写的问题“这个函数解析输入行”中,输入在编译时是未知的。另外,如果在编译时确实知道参数,那么您可能可以直接填充输出数组,而不是编写解析函数。这在C++17中无法使用您想要的接口完成,但如果您愿意等待它的实现,该函数可以标记为
constexpr
,就像在C++20中一样。我认为您无法将该函数转换为constexpr。这要求参数在编译时是已知的。@user7860670参数在编译时是已知的。这就是为什么我想把它转换成constexpr。但是在你写的问题“这个函数解析输入行”中,输入在编译时是未知的。另外,如果在编译时确实知道参数,那么您可能可以直接填充输出数组,而不是编写解析函数。这在C++17中无法使用您似乎想要的接口完成,但如果您愿意等待它实现,则可以像在C++20中一样将函数标记为
constexpr