給出。在我內部使用以下格式的類型定義庫:中調用的std :: to_string或std :: to_wstring基礎上的typedef
using AnsiChar = char;
using WideChar = wchar_t;
全局類型定義,基本上存儲char
特定於平臺的是在整個庫使用的定義如下:
// Either
using Char = AnsiChar;
// or
using Char = WideChar;
// depending on the platform this code is being compiled on
在我想要麼調用std::to_string
或std::to_wstring
根據當前Char
類型代碼中的一些點。我的嘗試如下所示:
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);
}
這是實現條件函數的正確方法,還是有其他建議用來實現此目的的方法嗎?
編輯。作爲一個側面說明我正在考慮使用函數指針使用類似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()'提供類,因爲它需要一個'const Char *'在它的構造函數中很合適。 –