Я имею дело с char
а также wchar_t
,
Я пишу вспомогательный класс строк, который добавляет некоторые регулярные выражения (с boost) для некоторых строк, но у меня есть оба string
а также wstring
, Теперь у меня есть 2 функции с дублированным кодом для каждой функции.
int countFoo(const char *s, const char *foo) {
string text(s);
boost::regex e(foo);
int count = 0;
boost::smatch match;
while ( boost::regex_search( text, match, e ) ) {
text = match.suffix();
count++;
}
return count;
}
int countFoo(const wchar_t *s, const wchar_t *foo) {
wstring text(s);
boost::wregex e(foo);
int count = 0;
boost::wsmatch match;
while ( boost::regex_search( text, match, e ) ) {
text = match.suffix();
count++;
}
return count;
}
Это работает, но я ищу какой-то элегантный метод (шаблон «какая-то магическая функция», указатель на функцию?) Для удаления дублированного кода.
Вы можете написать это как шаблон:
template <typename charT>
int countFoo(const charT *s, const charT *foo) {
basic_string<char> text(s);
boost::basic_regex<charT> e(foo);
int count = 0;
boost::match_results<typename basic_string<charT>::const_iterator> match;
while ( boost::regex_search( text, match, e ) ) {
text = match.suffix();
count++;
}
return count;
}
Других решений пока нет …