3

const char と const wchar_t があります。以下の私の関数はcharで動作します。char と wchar_t の両方を簡単に処理できる関数を作成する最も簡単で効率的な方法は何ですか?

    const char* asciiChar = "this is an ascii string";
    const wchar_t* unicodeChar = L"this is a unicode string";

    std::string replaceSubstring(const char* find, const char* asciiChar, const char* replace)
    {
        std::string const text(str);
        std::regex const reg(find);
        std::string const newStr = std::regex_replace(text, reg, replace);
        return newStr;
    }
4

3 に答える 3

3

別の関数を使用して関数をオーバーロードできます。

    std::wstring replaceSubstring(const wchar_t* find, const wchar_t* asciiChar, const wchar_t* replace)
    {
        std::wstring const text(str);
        std::wregex const reg(find);
        std::wstring const newStr = std::wregex_replace(text, reg, replace);
        return newStr;
    }
于 2014-05-13T05:07:00.850 に答える
2

以下のように、これにはテンプレートを使用できます。

template<typename CharT>
const CharT* replaceSubstring(const CharT* find, const CharT* str, const CharT* replace);

template<> const char* replaceSubstring<char>(const char* find, const char* str, const char* replace) 
{
    std::string const text(str);
    std::regex const reg(find);

    std::string swap_str(replace);

    return std::regex_replace(text, reg, swap_str).c_str();
}

template<> const wchar_t* replaceSubstring<wchar_t>(const wchar_t* find, const wchar_t* str, const wchar_t* replace) 
{   
    std::wstring const text(str);
    std::wregex const reg(find);

    std::wstring swap_str(replace);

    return std::regex_replace(text, reg, swap_str).c_str();
}

また、オーバーロードは別のオプションになる可能性があります。

以下のリンクから適切なアドバイスを得ることができます。

メソッドをオーバーロードせずに、C++ メソッドに const char* と const wchar_t* のいずれかをパラメーターとして受け入れることは可能ですか?

于 2014-05-13T05:12:03.460 に答える