c++ 有什么用于basic_string,其中T不是字符类型?

C字符串is the following的声明:

template< 
    class CharT, 
    class Traits = std::char_traits<CharT>, 
    class Allocator = std::allocator<CharT>
> class basic_string;

CharT是字符类型,可以是char,wchar_t,char16_t和char32_t;但是毕竟basic_string是一个模板,所以可以用其他CharT和其他分配器来实例化。虽然我可以在某些用例中考虑其他分配器,但我无法在其他数据类型的字符串的用例中考虑,例如:

using string = std::basic_string<int>;

使用整数字符串,我们不能将其初始化为一个字符串(显而易见的)也不是u32字符串(不是很明显,至少对我而言);但是只要列表的包含类型可转换为int,我们可以使用initializer_list初始化它:

string err1("test");   // Error!
string err2(U"test");  // Error!
string err3{"test"};   // Error!
string err4{U"test"};  // Error!
string err5 = "test";  // Error!
string err6 = U"test"; // Error!

string success1({U't', U'e', U's', U't'});
string success2 = {U't', U'e', U's', U't'};
string success3({'t', 'e', 's', 't'});
string success4 = {'t', 'e', 's', 't'};

但即使我们设法初始化一个整数字符串,我们也不能以正常的方式使用它:

std::cout << success1; // Error! expected 116101115116

预期与cout一起使用的basic_string是正常的,这是有道理的:毕竟我们不能假设应该如何打印整数或一串MyFancyClasses。

但无论如何,不​​禁止创建basic_string的奇怪实例;一方面由于缺乏禁止使用(也称为概念)的功能而禁止使用另一种编码basic_string而不会限制底层类型比在相反的方式(无概念)更容易,所以这让我很奇怪:

>有什么用于std :: basic_string< T>其中T不是字符类型?

对于任何使用,我正在考虑只能用T的字符串实现的东西,并且不能用T的向量来完成(或者将会显着难以做到),换句话说:

你有没有遇到一个T字串是更好的选择的情况?

如果您正在处理处理多个文本编码(例如ASCII和EBCDIC)的系统,则可能需要为每个编码单独使用字符类型和字符串类型。它们都应该被视为字符串,但是是明显不同的类型。
http://stackoverflow.com/questions/35775405/is-there-any-use-for-basic-stringt-where-t-is-not-a-character-type

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 有什么用于basic_string,其中T不是字符类型?