constexpr C ++容器–一种将push_back返回到initializer_list或类似方法的方法

此函数像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;
}

结果是输入字符串-vector<string_view>中的一组视图。输入未更改。
查看C ++ 17的string_view,我发现大多数功能都是constexpr。在我的函数中,只有vector::push_back()在运行时执行。因此,我决定制作parse_args() constexpr,需要用constexpr容器替换std::vector
我正在寻找一种附加到initializer_list上的方法,或者说在上一个方法之上创建新的initializer_list更好,但是没有成功。 请提出一种方法,将其“推回”到initializer_liststd::array或类似的constexpr容器中。我找不到任何大型的第三方库。

lxmforyou 回答:constexpr C ++容器–一种将push_back返回到initializer_list或类似方法的方法

由于这是在命令行参数上运行的,因此制作此constexpr几乎没有好处。如果它确实与非constexpr char*一起使用,则无论如何都无法调用。

对于大多数应用程序代码,constexpr的使用可能会很麻烦。

话虽如此,您可以定义一个具有指定上限(例如1000)的std::array,并假设您没有溢出。

本文链接:https://www.f2er.com/2550638.html

大家都在问