我正在处理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;
}
它有效,但我正在寻找一些优雅的方法(模板?一些oop magic?函数指针?)来删除重复的代码。
答案 0 :(得分:2)
你可以把它写成这样的模板:
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;
}