std::__are_same 简单解释
引言
在std::string中发现了这个函数,但当时并没有找到这个函数的具体意义,虽然能猜个大概,但始终不算解决 遂在解决后记录 以帮助其他有相同问题的朋友
cpp_type_traits.h
00115 // Compare for equality of types.
00116 template<typename, typename>
00117 struct __are_same
00118 {
00119 enum { __value = 0 };
00120 typedef __false_type __type;
00121 };
00122
00123 template<typename _Tp>
00124 struct __are_same<_Tp, _Tp>
00125 {
00126 enum { __value = 1 };
00127 typedef __true_type __type;
00128 };
我们可以看到其实非常简单 就是如果两个类型相同 就会匹配第二个类型 如果不相同 就会匹配第一个全特化的版本
我们来看一个使用的实例
以下是C++标准库迭代器实现中的一个构造函数
stl_iterator.h line 782
//Allow iterator to const_iterator conversion.
template<typename _Iter>
__normal_iterator(const __normal_iterator<_Iter,
typename __enable_if<
(std::__are_same<_Iter, typename _Container::pointer>::__value),
_Container>::__type>& __i) _GLIBCXX_NOEXCEPT
: _M_current(__i.base()) { }
我们可以清楚的看到std::__are_same放在enable_if的第一个参数 利用其中的value成员充当判断条件 这也是std::__are_same比较常用的一个场合 是元编程的一个基础工具
但我没搞清楚为什么这样写可以使迭代器转换成const迭代器, 希望知道的朋友能留下宝贵的解答
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南