本文介绍了问题上的boost ::互换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题情侣的boost ::交换。请参考code以下基本上是从升压/ swap.hpp 剪切粘贴。我指的是库版本1.43.0。

 命名空间boost_swap_impl
    {
      模板<类T>
      无效swap_impl(T&安培;离开后,​​T&安培;右)
      {
        使用命名空间std; //使用std ::互换,如果参数依赖查找失败
        互换(左,右);
      }  模板< T类,的std ::为size_t N'GT;
  无效swap_impl(T(安培;左)[N],T(安培;右)[N])
  {
    对于(的std ::为size_t我= 0; I< N ++ I)
    {
      :: boost_swap_impl :: swap_impl(左[I],右[I]);
    }
  }
}名字空间boost
{
  模板<组别为T1,T2类GT&;
  无效掉期(T1&安培;左,T2和放大器;右)
  {
    :: boost_swap_impl :: swap_impl(左,右);
  }
}


  1. 为什么声明的boost ::交换模板< typename的T1,typename的T2> 在休息的时候在code的它是所有处理相同类型?

  2. 如果我定义自己的全局函数无效掉期(T&安培,T&放大器;)我看到它是全局函数,它会从称为swap_impl(T&安培;离开后,​​T&安培;右)。这难道不是因为 swap_impl 冲突,因此错误条件也使用空间std 已掉界定?


解决方案

  1. 这使得它比的std ::交换专业化程度较低,所以你不要超载歧义错误当两个的std ::互换的boost ::交换在范围(的std ::互换将采取precedence)

  2. 无,无模板总是有重载决议时超过模板precedence,所以一个命名空间范围的非模板交换将采取precedence超过两个的boost ::交换的std ::互换(将在命名空间范围的模板交换超载对于UDT&ndash的;认为部分专业化,但不是真的..)。注意,不像的std ::互换的boost ::交换被明确写入利用的。

下面就是在C ++标准03对有两个点和ndash的说; [over.match.best](§13.3.3/ 1):

这篇关于问题上的boost ::互换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-19 03:24