在boost.regex中有一种方便的方法可以在ascii和utf之间切换吗?
我现在看到的唯一方法是,例如,在boost::u32regex
到boost::regex
之间切换。
这是在unicode和ascii之间切换的唯一方法吗? 我希望能够只传递一个参数来提升,指定我的字符编码,因此不必复制很多代码。
答案 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>
。这是模板的缺点之一 - 它们只是渗透到一切。