gpt4 book ai didi

无符号字符串类型的 C++ 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:10 26 4
gpt4 key购买 nike

视觉 C++ 2017:我使用无符号字符串:

typedef basic_string<unsigned char> ustring;

这工作正常,但是当我尝试以同样的方式使用正则表达式时,编译会抛出很多我不理解的错误:

#include <regex>
using namespace std;

typedef basic_regex<unsigned char> uregex;

int main()
{
uregex ur;
}

我明白了

error C2027: use of undefined type 'std::regex_traits<unsigned char>'

我怀疑 regex_traits 需要一个 typedef,但我不知道如何定义它。

最佳答案

basic_regex定义如下:([re.regex])

template <class CharT, class Traits = regex_traits<CharT>>
class basic_regex;

在这里,你实例化regex_traits<unsigned char> .每[re.traits]/1 :

The specializations regex_­traits<char> and regex_­traits<wchar_­t> shall be valid and shall meet the requirements for a regular expression traits class ([re.req]).

换句话说,regex_traits<unsigned char>可能有效也可能无效。您的实现似乎没有提供这样的定义。顺便说一下,代码在 GCC 上编译得很好但不在Clang .

没有便携的使用方式basic_regexunsigned char , 基于以下证明。

证明:假设,为了自相矛盾,我们使用 basic_regex<unsigned char, Traits> , 其中Traits是一个正则表达式特征 ( [re.req] )。然后 Traits::string_typebasic_string<unsigned char> ( [tab:re.req] ),相当于 basic_string<unsigned char, char_traits<unsigned char>> .然而,char_traits<unsigned char>不保证可用 ( [char.traits.specializations] ),并且我们不允许提供我们自己的显式特化,因为 unsigned char不是程序定义的类型 ( [namespace.std] ),因此没有可移植的方式来使用 char_traits<unsigned char> .这种矛盾表明我们最初的假设是错误的。因此,我们已经证明没有可移植的方式来使用basic_regex。与 unsigned char .

关于无符号字符串类型的 C++ 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57177343/

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