欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 【C++ 模版】: std::enable_if

【C++ 模版】: std::enable_if

2025/6/29 14:02:18 来源:https://blog.csdn.net/weixin_39568531/article/details/145165286  浏览:    关键词:【C++ 模版】: std::enable_if

一、引语和结论

这玩意干啥的?见名知意,if 当某个条件成立时,enable xxx(~~~~). 这胡说有用么,显然并不是胡说,咱们有依据的。
这里咱们先给出结论:
std::enable_if_t 还真就是在模版中判断当条件为true时,type类型存在(实际为模版类型_Ty的别名);否则type类型未定义,在未定义条件下使用,编译器报错。这就可以很舒服的做到,在编译阶段使得某些模板在特定条件下可用,而在其他条件下不可用。

二、源码剖析

template <bool _Test, class _Ty = void>
struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty>
struct enable_if<true, _Ty> { // type is _Ty for _Testusing type = _Ty;
};template <bool _Test, class _Ty = void>
using enable_if_t = typename enable_if<_Test, _Ty>::type;

我们通过源码剖析来证实咱们在上面抛出的结论。

template <bool _Test, class _Ty = void>
struct enable_if {}; // no member "type" when !_Test

enable_if 为模版类型,接受两个模版参数:一个bool类型 的常量 _Test 和一个类型_Ty,缺省类型为void;
这里很好理解,不过多赘述。

template <class _Ty>
struct enable_if<true, _Ty> { // type is _Ty for _Testusing type = _Ty;
};

诶,上面已经定义了一个 enable_if ,这里怎么又定义了一次,不会报错么?—— 这样的问题,观看本篇的小伙伴应该不会存在疑惑的吧。我可是默认了大家有一定的模版基础知识功底的哈。
说说,这里 struct enable_if<true, _Ty>是啥子啊,不就是模版的特化么,我就默认第一个参数是true,我还接受一个模版参数 _Ty; 好么,这时候,我就玩点花样了。既然你告诉了我你是CHU,哦,说错了,是true,那我也大方点,给你取个别样的小名,using type = _Ty;,我也不管你具体是啥类型了,反正这会我都叫你type

  • 这点,渣男必学。譬如你同时撩了多个妹子,或者情史复杂,故事很多(我有酒,欢迎来讲),你总担心会在某个妹子面前交错名字。这时候你就得用上这个智慧了,统一提前洗脑,所有妹子不叫名字,darlinghoney…随便选。 (博主声明:只作为教学,本人不曾使用此策略
template <bool _Test, class _Ty = void>
using enable_if_t = typename enable_if<_Test, _Ty>::type;

这个么更好说了,enable_if_t 就是type的别名, 而 type_Test为true时,他是 _Ty的别名;当_Test为false时,type 就不存在, enable_if_t自然也不存在(好家伙,女友条件管理大师啊)

破案了,破案了。
所以,这会儿你应该彻底搞懂std::enable_if了吧。而且是

C++男性从业者必懂!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词