我只找到了 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' 对象需要兼容。但我真的不确定。
最佳答案
fooString
必须满足双向迭代器的要求。 [双向迭代器] cppreference's documentation 非常接近标准措辞,所以您可以照着做。
我将在此处添加相关部分:
- 迭代器
r
必须同时满足操作--r
和r++
- 这些操作返回对相同类型迭代器的引用
*r
必须返回对迭代器正在迭代的类型的引用。- a
reference
type according to what cppreferenceiterator_traits
列表
- a
如果您的 BidirectionalIterator::value_type
不是标准字符类型(任何您可以制作 std::basic_string
的字符类型,例如 char
),你还需要专精 regex_traits
,尽管这已经进入了兔子洞。
关于c++ - regex_iterators 可以用于自定义字符串类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710130/