博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】traits技术及模板偏特化
阅读量:5337 次
发布时间:2019-06-15

本文共 1613 字,大约阅读时间需要 5 分钟。

#include 
using namespace std;struct __xtrue_type { }; // define two mark-typestruct __xfalse_type { };class CComplexObject // a demo class{public: virtual void clone() { cout << "in clone" << endl; }};class CDerivedComplexObject : public CComplexObject // a demo derived class{public: virtual void clone() { cout << "in derived clone" << endl; }};// A general edtion of Traitstemplate
struct Traits{ typedef __xfalse_type has_clone_method; // trait 1: has clone method or not? All types defaultly has no clone method.};// Specialized edtion for ComplexObjecttemplate <>struct Traits
{ typedef __xtrue_type has_clone_method;};template
class XContainer{ template
class Impl { }; template <> class Impl <__xtrue_type> { public: void clone(T* pObj) { pObj->clone(); } }; template <> class Impl <__xfalse_type> { public: void clone(T* pObj) { } };public: void clone(T* pObj) { Impl
::has_clone_method>().clone(pObj); }};void main(){ int* p1 = 0; CComplexObject c2; CComplexObject* p2 = &c2; CDerivedComplexObject c3; CComplexObject* p3 = &c3; // you must point to a derived object by a base-class pointer, //it's a little problem XContainer
n1; XContainer
n2; XContainer
n3; n1.clone(p1); n2.clone(p2); n3.clone(p3);}

摘自:http://www.cppblog.com/woaidongmao/archive/2008/11/09/66387.html

转载于:https://www.cnblogs.com/budapeng/p/5237629.html

你可能感兴趣的文章
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>
博弈论小结
查看>>
模拟Post登陆带验证码的网站
查看>>
NYOJ458 - 小光棍数
查看>>
java中常用方法
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>