boost.regex:在ascii和unicode之间切换

时间:2016-05-06 16:04:45

标签: c++ boost unicode utf-8

在boost.regex中有一种方便的方法可以在ascii和utf之间切换吗?

我现在看到的唯一方法是,例如,在boost::u32regexboost::regex之间切换。

这是在unicode和ascii之间切换的唯一方法吗? 我希望能够只传递一个参数来提升,指定我的字符编码,因此不必复制很多代码。

1 个答案:

答案 0 :(得分:2)

  

这是在unicode和ascii之间切换的唯一方法吗?

差不多。您认为boost::regex实际上是一个类型别名:

namespace boost{
    template <class charT, class traits = regex_traits<charT>  >
    class basic_regex;

    typedef basic_regex<char>      regex;
    typedef basic_regex<wchar_t>   wregex;
}

请注意,字符类型是模板参数 - 它不是运行时参数。由于boost::regex是基于char构建的,因此无法支持unicode。

boost::u32regex的方式相同:

typedef basic_regex<UChar32,icu_regex_traits> u32regex;

为了在它们之间进行真正的概括,你必须将所有内容都写成模板。您只需boost::regex,而不是boost::basic_regex<charT, traits>。这是模板的缺点之一 - 它们只是渗透到一切。