template の部分特殊化がよくわかりません(2)
とりあえず回避策を考える。
固定文字幅の型と可変幅文字の型を分けるか...
// 可変幅 template <class T, class U> struct multibyte_char_traits { typedef T min_char_width_type; typedef U max_char_width_type; typedef variable_char_width_type char_width_type; }; // 固定幅 template <class T> struct singlebyte_char_traits { typedef T min_char_width_type; typedef T max_char_width_type; typedef fiexed_char_width_type char_width_type; };
typedef multibyte_char_traits<unsigned char, singed char> m_traits_type; typedef char_iteartor<m_traits_type> m_iterator_type; とか typedef singlebyte_char_traits<char> s_traits_type; typedef char_iteartor<m_traits_type> s_iterator_type;
で、Regex に食わす時は
typedef std::pair<m_iterator_type, m_iterator_type> range_type; range_type range = パターン文字列の begin, end の対 Regex::Compiler<m_iterator_type> compiler; Regex::Pattern<m_iterator_type>* pattern = compiler.Compile(range);
ここまで書いて気づいたが Singlebyte の時って別に iterator いらないよな。
生のポインタを渡せばいい。そのために iterator をテンプレート引数にしたんだし。
typedef std::pair<char, char> range_type; range_type range; range.first = パターン文字列の begin range.second = パターン文字列の end Regex::Compiler<char> compiler; Regex::Pattern<char>* pattern = compiler.Compile(range);
早く気づけよ、俺。 orz..