gpt4 book ai didi

c++ - 根据给定的 typedef 调用 std::to_string 或 std::to_wstring

转载 作者:行者123 更新时间:2023-11-30 05:08:27 26 4
gpt4 key购买 nike

在一个库中,我在内部使用以下形式的 typedef:

using AnsiChar = char;
using WideChar = wchar_t;

一个全局 typedef,基本上存储特定于平台的 char在整个库中使用的定义如下:

// Either
using Char = AnsiChar;
// or
using Char = WideChar;
// depending on the platform this code is being compiled on

在代码中的某个时刻,我想调用 std::to_stringstd::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> 的函数指针。作为返回类型来概括它,然后以某种方式有条件地绑定(bind) std::to_string 中的任何一个或 std::to_wstring指向指针。

最佳答案

template<class Char>
struct string_traits;
template<>
struct string_traits<char>{
using string=std::string;
template<class T>
static string convert_to_string(T&& t){
using std::to_string;
return to_string(std::forward<T>(t));
}
};
template<>
struct string_traits<wchar_t>{
using string=std::wstring;
template<class T>
static string convert_to_string(T&& t){
using std::to_wstring;
return to_wstring(std::forward<T>(t));
}
};

现在你的代码很简单

template <typename TChar = Char, typename T>
std::basic_string<TChar>
ToString(const T& Arg) {
return string_traits<TChar>::convert_to_string(Arg);
}

关于c++ - 根据给定的 typedef 调用 std::to_string 或 std::to_wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com