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迭代器, 希望知道的朋友能留下宝贵的解答

原文链接: https://www.cnblogs.com/lizhaolong/p/16437360.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    std::__are_same 简单解释

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/395763

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月5日 下午1:42
下一篇 2023年4月5日 下午1:42

相关推荐