当前位置: 首页 > news >正文

推荐个做淘宝主图视频的网站wordpress 响应式 企业

推荐个做淘宝主图视频的网站,wordpress 响应式 企业,怎么做定位钓鱼网站,怎样在工商网站做遗失1.前言 swap是个有趣的函数,原本它只是STL的一部分,而后成为异常安全编程的基石,以及用来处理自我赋值可能性的一个常见机制。由于swap功能如此强大,适当的实现很重要。然而在非凡的重要性之外它也带来了非凡的复杂度。 所谓swa…

1.前言

swap是个有趣的函数,原本它只是STL的一部分,而后成为异常安全编程的基石,以及用来处理自我赋值可能性的一个常见机制。由于swap功能如此强大,适当的实现很重要。然而在非凡的重要性之外它也带来了非凡的复杂度。

所谓swap两对象值,意思是将两对象的值彼此赋予对方。缺省情况下swap动作可由标准程序库提供的swap算法完成。其典型的实现方式如下:

namespace std{template<typename T>void swap(T& A,T& b){T temp(a);a=b;b=temp;}
}

只要类型T支持copying(通过copy构造函数和copy assignment操作符完成),缺省的swap实现代码就会帮你置换类型为T的对象,不需要为此做另外的工作。

该缺省的swap实现版本十分平淡,无法刺激你的肾上腺。它涉及到三个对象的复制:a复制到temp,b复制到a,以及temp复制到b。但是对于某些类型而言,这些复制动作没有必要:对那种情况而言swap缺省行为等于杀机用牛刀。

2.实例

最主要的一种类型就是“以指针指向一个对象,内含真正数据”那种类型。这种设计的常见表现形式就是所谓的“pimpl手法”。如果以这种手法设计Widget class,看起来像这样:

class WidgetImpl{   //针对Widget数据而设计的classpublic:
...
private:
int a,b,c;//可能有许多数据
std::vector<double> v;//意味复制时间很长
。。。};
class Widget{public:Widget(const Widget& rhs);Widget& operator=(const Widget& rhs){...*pImpl=*(rhs.pImpl);}...private:Widget Impl* pImpl;//指针,所有对象内含Widget
}

一旦要置换两个Widget对象值,我们唯一需要做的就是置换其pImpl指针,但缺省的swap算法不知道这一点,它不止复制三个widgets,还复制三个WidgetImpl对象。非常缺乏效率。

我们希望能够告诉std::swap,当widget被置换时,真正该做的是置换其内部的pImpl指针。确切实践这个思路的一个做法是:将std::swap针对Widget特化,下面是基本的构想,但目前这个形式无法通过编译:

namespace std{template<>void swap<Widget>(Widget& a,Widget& b){swap(a.pImpl,b.pImpl);}
}    

这个函数一开始得"template<>"表示它是std::swap的一个全特化版本,函数名称之后的"<Widget>"表示这一特化版本系针对“T是Widget”而设计。换句话说当一般性的swap template施行于Widget身上便会启用这个版本。通常我们不能够改变std命名空间内的任何东西,但可以为标准template制造特化版本,使它专属于我们自己的classes。

但是该函数无法通过编译,因为它企图访问a和b内的pImpl指针,而那却是private,我们可以将这个特化版本声明为friend,但和以往的规矩不太一样:我们令Widget声明为swap的public成员函数做真正的置换工作,然后将std::swap特化,令它调用该成员函数:

class Widget{public:...void swap(Widget& other){using std::swap;swap(pImpl,other.pImpl);//若要置换Widgets就置换其pImpl指针}...
};
namespace std{template<>void swap<Widget>(Widget& a,Widget& b){a.swap(b);//若要置换Widgets,调用其swap成员函数}
}

这种做法不只能够通过编译,还与STL容器有一致性,因为所有STL容器也都提供有public swap成员函数和std::swap特化版本。

然而假设Widget和WidgetImpl都是class templates而非classes,也许我们可以将Widget内的数据类型加以参数化:

template<typename T>
class WidgetImpl{...};
template<typename T>
class Widget{....};

http://www.yayakq.cn/news/980918/

相关文章:

  • 免费网站建设步骤网易做网站
  • 移动端高端网站电脑培训班速成班附近
  • 青海西宁最新消息今天seo sem区别
  • 网站开发官网源码公司建设网站计入什么分录
  • 做兼职一般去哪个网站密山网站建设
  • 建设网站广州市做旅游网站的目的是什么
  • 江苏省和住房城乡建设厅网站首页网站编辑心得体会
  • 青岛企业网站制作唐山网站建设维护
  • 咸阳学校网站建设哪家专业找外包做网站不给代码
  • 未来做那些网站致富网页设计入门+齿轮
  • 苏州优化外包广州网站优化运营
  • 建设银行门户网站外网vp(永久免费)加速器下载
  • 高校网站平台建设云服务器做网站新手教程
  • wordpress底部代码宁波seo快速优化平台有哪些
  • 域名防红短链接班级优化大师电脑版
  • 做名片网站广州高端网站开发
  • 泰州外贸网站设计烟台主流网站
  • 上海网站建设哪家公司好js网站开发视频
  • 高端制作网站服务秦皇岛外贸网站建设
  • 西安做网站的公司报价福州建设发展集团有限公司网站
  • 模板网站建设信息长春公司网站推广
  • 二级a做爰片免费网站网易游戏官网
  • 接网站开发做多少钱排版网页设计教程
  • 网站可以个人备案吗微信小程序怎么做开发
  • 公司网站建设的好处flash怎么做网页
  • 做企业内部网站要多久焦作网站开发公司电话
  • 手机版网站如何做动漫公司网站建设
  • ps做网站尺寸在万网申请的域名_需要把万网的账户密码给做网站的吗
  • 顺德水利和国土建设局网站网站修改报价
  • 第二章 网站建设艺客网站首页