如何用STL中的basic_string定义一个自己的字符串类型(如unsigned short)?
STL中默认提供了string和wstring,根据说明,它们只是通过typedef basic_string<char> string和typedef basic_string<wchar_t> wstring的方式定义。
由于wchar_t在Linux占4个字节,而在Windows中占2个字节,原来的Windows程序中大量采用了wstring,由于代码移植的需要(涉及通讯),因此希望能在Linux中定义一个2个字节型的字符串,但是遇到了问题。我是这样定义的:
#define unsigned short uchar_t;
typedef basic_string<uchar_t> ustring;
但是这么定义的时候,会引起很多错误,如无法赋值,=号操作也不行(编译提示是没有实现std::char_traits<unsigned short>::copy(....)
可以说所有的编译出错都是与底层的std::char_traits有关
为什么string和wstring只通过一个typedef,传入一个模板参数就可以了,而我自己想定一个ustring,就会遇到这么多问题?同时上面的出错提示,如果我将该函数的实现自己完成,那么就不会出现相应的错误,但这样的话,我岂不是要重新与basic_string有关的类,如std::char_traits<uchar_t>?如果真这样,那泛式编程(模板类)不就没有意义了?
请指教!