为了账号安全,请及时绑定邮箱和手机立即绑定

元编程:函数定义失败定义了单独的函数

元编程:函数定义失败定义了单独的函数

C++
RISEBY 2019-10-12 09:56:58
在此答案中,我根据类型的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();}
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

使用Walter Brown的void_t:


template <typename...>

using void_t = void;

制作这样的类型特征非常容易:


template<typename T, typename = void>

struct has_to_string

: std::false_type { };


template<typename T>

struct has_to_string<T, 

    void_t<decltype(std::to_string(std::declval<T>()))>

    > 

: std::true_type { };


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 413 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信