6

テンプレート化したい関数があります。現時点では、 と の 2 つの異なるバージョンがstd::stringありstd::wstringます。

機能(簡素化)はこのようなものです

template <class T, class _Tc>
std::vector<T> TokenizeArgs(const T& in) {
const T tofind = T("\"' ");
.. do stuff ..
}

Tは または のいずれstd::stringstd::wstring_Tcあり、 または のいずれcharwchar_tです。テンプレート バージョンで動作するように定義した定数文字列を取得する際に問題が発生しています。上記のコードは、配列を取るコンストラクターstd::stringがないため、機能しますが、機能しません。通常、これを修正するには、定数文字列を として宣言しますが、そうすると では機能しません。std::wstringstd::wstringchar*const T tofind = L"\"' "std::string

テンプレートの経験があまりないので、この問題を修正する方法がよくわかりません。

4

1 に答える 1

6

const の作成を独自のファクトリ関数に移動し、その関数を と に個別に特化することができstringますwstring

const T tofind = CreateConst<T>();


template <class T>
const T CreateConst();

template <>
const std::string CreateConst<std::string>()
{
     return std::string("\"' ");
}

template <>
const std::wstring CreateConst<std::wstring>()
{
     return std::wstring(L"\"' ");
}
于 2012-12-04T07:29:10.077 に答える