のtypedef与えられたに基づいて:呼び出しのstd :: to_stringにまたはのstd :: to_wstring私は内部的に次の形式の型定義を使用していますライブラリで
using AnsiChar = char;
using WideChar = wchar_t;
基本的には、プラットフォーム固有のchar
されることを保存するグローバルtypedefはライブラリ全体で使用される。このように定義されています。私は現在Char
タイプに応じstd::to_string
またはstd::to_wstring
をコールするかしたいコードのある時点で
// Either
using Char = AnsiChar;
// or
using Char = WideChar;
// depending on the platform this code is being compiled on
。私の試みは次のようになります:
template <typename TChar = Char, typename T>
typename std::enable_if<std::is_same<TChar, AnsiChar>::value, std::string>::type
ToString(const T& Arg)
{
return std::to_string(Arg);
}
template <typename TChar = Char, typename T>
typename std::enable_if<std::is_same<TChar, WideChar>::value, std::wstring>::type
ToString(const T& Arg)
{
return std::to_wstring(Arg);
}
これは条件付き関数を実装する正しい方法ですか、これを行うには他の方法がありますか?
EDIT。私は関数ポインタでこれを一般化する戻り値の型としてstd::basic_string<Char>
のようなものを使って作業することを検討していましたが、ポインタにstd::to_string
またはstd::to_wstring
のいずれかを条件付きでバインドします。
ているのですか?一般的な文字列型 'string_type = std :: basic_string;'を定義しようとしていますか?しかし、それはあなたのコードの残りの部分をノックします。例えば、あなたは 'std :: cout'をこれらの関数のどれかから返された*文字列*としますか? –
Galik
@Galik気づいたように、私は 'std :: basic_string'メンバーを持つラッパークラスを持っています。基本的に 'ToString(...)。c_str()'をクラスに提供しています。 Char * 'を生成します。 –