шаблон char / wchar_t, строка / wstring, cout / wcout, регулярное выражение / wregex (или любой возможный обходной путь)

Я имею дело с 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;
}

Это работает, но я ищу какой-то элегантный метод (шаблон «какая-то магическая функция», указатель на функцию?) Для удаления дублированного кода.

1

Решение

Вы можете написать это как шаблон:

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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]