gpt4 book ai didi

c++ - regex_iterators 可以用于自定义字符串类型吗?

转载 作者:行者123 更新时间:2023-11-30 03:28:18 24 4
gpt4 key购买 nike

我只找到了 regex_iterators 被初始化为

的例子
regex_iterator::<string::iterator>

如果我有一个包含一系列字符的类,例如:

class fooString {
private:
deque<bar> data;

// ... other functionality ...
}

其中 bar 是与 std::to_string 兼容的类或结构

如何使 fooStringbar 与正则表达式兼容,以便我可以调用

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 必须同时满足操作 --rr++
    • 这些操作返回对相同类型迭代器的引用
  • *r 必须返回对迭代器正在迭代的类型的引用。
    • a reference type according to what cppreference iterator_traits
    • 列表

如果您的 BidirectionalIterator::value_type 不是标准字符类型(任何您可以制作 std::basic_string 的字符类型,例如 char),你还需要专精 regex_traits ,尽管这已经进入了兔子洞。

关于c++ - regex_iterators 可以用于自定义字符串类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com