此函数像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_list
或std::array
或类似的constexpr容器中。我找不到任何大型的第三方库。