1

私はとを扱っていcharますwchar_t

いくつかの文字列に(ブースト付きの)正規表現を追加するヘル​​パー文字列クラスを作成していますが、との両方が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マジック?関数ポインター?)を探しています。

4

1 に答える 1

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;
}
于 2012-11-10T21:15:12.823 に答える