2012-12-04 16 views
6

私はテンプレートにしたい機能を持っています。現時点ではstd::stringstd::wstringの2つの異なるバージョンがあります。テンプレートと定数文字列

関数(ストリッピング)この

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

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

私はテンプレートに関する多くの経験がないので、この問題の修正方法はわかりません。

+0

@BЈовић他の機能が同じであるため – user1520427

答えて

6

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

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"\"' "); 
} 
関連する問題