在此答案中,我根据类型的is_arithmetic属性定义一个模板:
template<typename T> enable_if_t<is_arithmetic<T>::value, string> stringify(T t){
return to_string(t);
}
template<typename T> enable_if_t<!is_arithmetic<T>::value, string> stringify(T t){
return static_cast<ostringstream&>(ostringstream() << t).str();
}
dyp建议,is_arithmetic是否to_string为类型定义而不是类型的属性作为模板选择标准。这显然是可取的,但我不知道一种说法:
如果std::to_string未定义,则使用ostringstream重载。
声明to_string条件很简单:
template<typename T> decltype(to_string(T{})) stringify(T t){
return to_string(t);
}
与我无法弄清楚如何构造的标准相反。这显然行不通,但希望它能传达我正在尝试构造的内容:
template<typename T> enable_if_t<!decltype(to_string(T{})::value, string> (T t){
return static_cast<ostringstream&>(ostringstream() << t).str();
}
红颜莎娜
相关分类