我只找到regex_iterators
被推定为
regex_iterator::<string::iterator>
如果我有一个包含一系列字符的类,例如:
class fooString {
private:
deque<bar> data;
// ... other functionality ...
}
bar
是与std::to_string
如何让fooString
和bar
与正则表达式兼容,以便我可以调用
fooString myFoo = ...
regex e( /* some regex notation */);
regex_iterator::<fooString::iterator> regIt(myFoo.begin(), myFoo.end(), e);
...并且能够像对待字符串那样迭代它吗?
我尝试了以下体验:
std::deque<int> testDeque { 4, 5, 5, 5, 6, 7 };
std::regex e("5{1,3}");
std::regex_iterator<std::deque<int>::iterator>
regIt(testDeque.begin(), testDeque.end(), e);
并获得编译错误
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\regex(2271): error C2027: use of undefined type 'std::regex_traits<_Elem>'
with
[
_Elem=int
]
所以我不认为双向迭代器就足够了,因为deque符合它,我认为'bar'对象需要兼容。但我真的不确定。
答案 0 :(得分:2)
fooString
必须满足双向迭代器的要求。 [bidirectional.iterators] cppreference's documentation 非常接近标准用语,所以你可以关注它。
我将在此处添加相关部分:
r
必须满足操作--r
和r++
*r
必须返回对迭代器迭代的类型的引用。
reference
类型
如果您的iterator_traits
不是标准字符类型(您可以使用BidirectionalIterator::value_type
制作std::basic_string
的任何内容),那么您还需要专门化regex_traits
虽然这个兔子洞已经下降了。