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

做网站做本地服务器wordpress 更新翻译

做网站做本地服务器,wordpress 更新翻译,电脑首页wordpress,今天上海重大新闻事件最近在复习C有关知识#xff0c;又重新看Effective C#xff0c;收获颇丰。原来以前看这边书#xff0c;好多地方都是浅尝辄止。Effective C条款25#xff1a;考虑写出一个不抛出异常的swap函数#xff0c;涉及到C模板专门化(Templates S…  最近在复习C有关知识又重新看Effective C收获颇丰。原来以前看这边书好多地方都是浅尝辄止。Effective C条款25考虑写出一个不抛出异常的swap函数涉及到C模板专门化(Templates Specialization)和函数重载(overloading)问题而当重载与模板搅合在一起时许多问题都变得“模棱两可”。   首先回顾Effective C条款25考虑写出一个不抛出异常的swap函数想告诉我们什么东西。   swap函数为我们提供了异常安全编程的方法以及用来作为处理自我赋值一种常见机制因此实现一个不抛出异常的swap函数变得相对重要起来。缺省情况下的swap函数的典型实现如下 namespace std {templatetypename Tvoid swap(T a, T b){T temp(a);a b;b temp; } }   然后对于模型数据类型其成员变量是指针指向一个对象保存了数据(pointer to implementation手法)。如果copying函数采用了deep copying方法上面的代码将会非常低效因为只需要互换a与b指针即可。问题是缺省版本swap对类型无法可知这些信息因此针对上述情况需要专门化swap函数。   1如果T是class可以先让T提供一个swap函数完成swap功能然后借由functhon template的全特化实现专门化的swap函数 class Widge { public:void swap(Wiget other){using std::swap();swap(pImpl, other.pImpl);}private: WidetImpl* pImpl;};//为程序提供一个特化版本的swap: namespace std {   template   void swapWidegt(Widget a, Widget b)   { a.swap(b);   } }   上面的代码很好的与STL容器保持了一致性因为STL容器也都提供了swap成员函数和std::swap特化版本。   2如果Widget与WidgetImpl不是class而是class template特化版本的swap函数我们可能想写成这样的形式 namespace std {templateclass Tvoid swapWidegtT(WidgetT a, WidgetT b) {a.swap(b);} }   然而这个代码却无法通过编译C不支持function template的偏特化我们需要使用模板函数的重载技术 namespace std {templateclass Tvoid swap( WidgetT a, WidgetT b) //重载了function templates{a.swap(b);} }   问题似乎已经解决了嗯是的还存在一个问题用户可以全特化std内的templates但是不能新的对象(template、function、class)。解决方法是将这些类与swap函数放到新的命名空间中这边便独立与std命名空间。 --------------------------------------------------------------------华丽分割线--------------------------------------------------------------------   上面介绍的内容涉及到以下的内容1模板函数2重载函数3全特化和偏特化。当这些东西交织在一起的时候我们需要足够的耐心做区分甄别。   1模板类、模板函数与重载   // Example 1: Class vs. function template, and overloading //// A class templatetemplatetypename T class X { /*...*/ }; // (a) 类模板// A function template with two overloadstemplatetypename T void f( T ); // (b) 函数模板 templatetypename T void f( int, T, double ); // (c) 函数模板重载   (a)、(b)、(c)均没有专门化这些未被专门化的template又被称为基础基模板。   2特化   template class可以有全特化与偏特化两种 template function仅能全特化。 // Example 1, continued: Specializing templates // // A partial specialization of (a) for pointer types templatetypename T class XT* { /*...*/ }; // A full specialization of (a) for int template class Xint { /*...*/ };// A separate base template that overloads (b) and (c) // -- NOT a partial specialization of (b), because // theres no such thing as a partial specialization // of a function template! templateclass T void f( T* ); // (d)// A full specialization of (b) for int template void fint( int ); // (e)// A plain old function that happens to overload with // (b), (c), and (d) -- but not (e), which well // discuss in a moment void f( double ); // (f)   当function template与重载搅合在一起的时候就存在匹配哪个版本函数的问题匹配规则如下   1首先查找non template function 如果在这些函数中匹配成功则匹配结束(first-class citizens)   2否定在base template function 中查找最匹配的函数并实例化如果base template function恰巧有提供全特化版本模板函数则使用全特化版本(sencond-class citizens)  将以上两个规则运用的例子 // Example 1, continued: Overload resolution // bool b; int i; double d;f( b ); // calls (b) with T bool f( i, 42, d ); // calls (c) with T int f( i ); // calls (d) with T int f( i ); // calls (e) f( d ); // calls (f)   最后一个问题如何判断哪个base template function被specialization再看下面的例子: // Example 2: Explicit specialization // templateclass T // (a) a base template void f( T );templateclass T // (b) a second base template, overloads (a) void f( T* ); // (function templates cant be partially // specialized; they overload instead)template // (c) explicit specialization of (b) void f(int*);// ...int *p; f( p ); // calls (c)   c是b是全特化f(p)将会调用符合人们的一般想法但是如果置换b与c的顺序结果就不那么一样了 // Example 3: The Dimov/Abrahams Example // templateclass T // (a) same old base template as before void f( T );template // (c) explicit specialization, this time of (a) void f(int*);templateclass T // (b) a second base template, overloads (a) void f( T* );// ...int *p; f( p ); // calls (b)! overload resolution ignores // specializations and operates on the base // function templates only   这个时候c将是a的全特化(编译器没看到后面的b的定义)。按照配对规则首先查找base template function最适合匹配的b正好最为匹配并且没有全特化版本因此将会调用b。   重要准则   1如果我们希望客户化base template function直接利用传统的函数形式如果使用重载形式那么请不要提供全特化版本。   2如果正在编写一个base template function不要提供特化和重载版本将客户化定制功能下放给用户。实现方法是在class template 同static 函数接口 // Example 4: Illustrating Moral #2 // templateclass T struct FImpl;templateclass T void f( T t ) { FImplT::f( t ); } // users, dont touch this!templateclass T struct FImpl { static void f( T t ); // users, go ahead and specialize this };   准则2的动机就是利用class template 特化与偏特化功能实现function 特化与偏特化功能。   参考文献 Effective C, Scott Meyers Why Not Specialize Function Templates?,  C/C Users Journal, 19(7), July 2001                                          转载于:https://www.cnblogs.com/wangbogong/p/3249238.html
http://www.yutouwan.com/news/501807/

相关文章:

  • 云南建设投资集团网站首页薪酬体系搭建工具
  • 易企秀网站开发wordpress 更换ip
  • 工业皮带怎么做免费的网站社交做的最好的网站
  • 网站怎么制作做正能量网站入口不用下载免费
  • 网站制作项目杜集网站建设
  • 四川交投建设工程股份有限公司网站英文字体设计网站
  • 海原网站建设网站建设经济效益
  • flash个人网站设计高端企业网站建设核心
  • 网站上传的图片怎么做的清晰度有关网站建设的图片
  • 怎么把自己的网站上传到百度wordpress模板选择
  • 河北企业网站设计网站策划书中应包括市场竞争对手的信息
  • 佛山网站制作哪个好薇网页制作实战视频
  • 房子如何上网站做民宿做库房推广哪个网站好
  • 用网站建设与管理创业疾控中心24小时咨询电话
  • 苏州网站制作及推广做水处理药剂的公司网站
  • 网站快速备案濮阳seo外包公司
  • 网站搜索引擎优化主要方法下载建设网站
  • 那曲地区建设局网站软件源码成品资源下载网站
  • 猎头自己在哪个网站做单网站建设英文字体
  • 首席经济学家共议资产前景 慢牛逻辑逐步形成
  • 死了么APP称承受巨大压力 创新路上的坚守与挑战
  • 贵金属“狂飙” 这些骗局要警惕 理性投资防风险
  • 趴地菠菜黄心菜 河南本土蔬菜破圈 互联网助力鲜蔬走红
  • 德国遭遇“黑冰”天气 交通严重受阻
  • 女子轻信“办户口”谎言被骗近18万 骗子已被批捕
  • 俄称“榛树”导弹打瘫乌战机修理厂 重创维修与生产设施
  • 郑州制作网站费用公司网站规划案例
  • 安阳网站建设公司出租车公司深圳网络推广公司哪家好
  • 义乌北苑编程网站开发公司html电影网页制作模板
  • 黑龙江省营商环境建设监督局网站注册公司取名技巧