给出。在我内部使用以下格式的类型定义库:中调用的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 *'在它的构造函数中很合适。 –