![](/img/trans.png)
[英]Difference between std::basic_string_view<T> and std::span<T>
[英]Iterating regex submatches represented as std::basic_string_view
是否有直接有效的方法将std::sub_match
转换为std::basic_string_view
(无需构造中间std::basic_string
且无需中间堆分配)? 或者进一步提高一个抽象级别,是否有std::regex_token_iterator
的替代方法,可以使用std
(C ++ 17)迭代表示为std::basic_string_view
而不是std::sub_match
正则表达式子匹配?
我更喜欢在std::sub_match
上使用std::basic_string_view
的原因是:
std::basic_string_view
指的是char型对象的恒定连续序列,该序列的第一个元素位于位置0。 这将启用charconv
的std::from_chars
(令人惊讶的是,它没有使用ForwardIterator
实现)。 std::sub_match
似乎不是这种情况,因为它表示为一对BidirectionalIterator
。 std::basic_string_view
具有更丰富的类似于字符串的界面,在某些特殊情况下,对于某些文件格式,它可以促进附加的上下文相关的标记化。 没有通用的方法来检测迭代器是否连续。 我们仍然可以处理已知的连续迭代器-例如std::string
迭代器:
std::string_view as_sv(std::ssub_match m) {
if(!m.matched) return {};
return { &*m.first, m.second - m.first };
}
处理sub_match
的其余命名专业化作为练习留给读者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.