C++11 扩展多字节字符串的std::char\u特性

C++11 扩展多字节字符串的std::char\u特性,c++11,C++11,对于UTF8(或任何类型的多字节字符串),尤其是当您想要实现不区分大小写的行为时,字符特性是次优的。我目前正在考虑创建一个文本模板,如: template<typename CharT> struct text_traits : public std::char_traits<CharT> { static bool eq(const CharT *p1,const CharT *p2) { return std::char_traits<Char

对于UTF8(或任何类型的多字节字符串),尤其是当您想要实现不区分大小写的行为时,字符特性是次优的。我目前正在考虑创建一个文本模板,如:

template<typename CharT> struct text_traits : public std::char_traits<CharT>
{
  static bool eq(const CharT *p1,const CharT *p2)
  {
     return std::char_traits<CharT>::eq(*p1,*p2);
  }
}
template struct text\u traits:public std::char\u traits
{
静态布尔均衡(常数图*p1,常数图*p2)
{
返回std::char_traits::eq(*p1,*p2);
}
}
和lt或find的类似函数。在我开始之前,我的问题是:这完全是愚蠢的吗?它符合标准吗?
背景:我需要一个类似std::basic_string_的视图,具有更高级的搜索选项,例如“忽略大小写”-这就是我遇到这个问题的原因)

您可能需要一个完整的Unicode库,比如ICU,在这一点上,字符特征的问题变得毫无意义。该库要么根本不使用特征(如果它不是本地C++库),也可以提供它自己的一些特性。当然,如果你想建立这样一个库,你可能必须考虑扩展性格特征。我知道这不是一个全面的解决方案。但我可以和std::toupper一起生活(即使它不能将ß转换成SS和…)。但是考虑到这个限制,问题是:char\u traits可以这样扩展吗?如果你正在使用
wchar\u t
,为什么不在使用时使用
std::char\u traits
?它不会给你不区分重音的搜索,嗯。。。我可能应该更准确一些。例如,我有一个很大的json文档,它是utf8,我不想因为转换而将大小增加一倍,只是因为我想进行不区分大小写的搜索。在通常的json文档中,非ASCII字符(如果有的话)可能少于10%。“动态”比较对我来说更有意义。您不需要转换所有文档。有一个自定义迭代器,可以迭代文档并取消对wchar\u t的引用(或者可能是char32\u t;您可能需要在UCS4中工作的字符类型)。文档本身很可能保持UTF-8。