C++中用模板模拟多态及其优缺点

来源:互联网 发布:ubuntu mate 输入法 编辑:程序博客网 时间:2024/05/01 13:13
   c++的模板是个很强很暴力的东西,可以轻松地模拟多态。下面举个例子:
====================================================================
#include <iostream>
#include <string>

using namespace std;

class StarDecorator//注意:与多态不同,不需要有类阶层(简单说不需要继承啥接口)
{
public:
    voidprintHead()
    {
       cout<< "**********"<< endl;
    }
    voidprintTail()
    {
       cout<< "**********"<< endl;
    }
};

class AddDecorator
{
public:
    voidprintHead()
    {
       cout<< "++++++++++"<< endl;
    }
    voidprintTail()
    {
       cout<< "++++++++++"<< endl;
    }
};

template<class Decorator>
class Printer
{
public:
    voidprint(const string& str)
    {
      decorator.printHead();
       cout<< str<< endl;
      decorator.printTail();
    }
private:
    Decoratordecorator;
};

int main(int argc, char* argv[])
{
   Printer<StarDecorator> p1;
   p1.print("Hello,World!");
   
   Printer<AddDecorator> p2;
   p2.print("Hello,World!");

    return0;
}
========================================
   是不是很像多态?更具体地说是设计模式中的Strategy模式。
   这么做的好处:
   1)比用多态时简单,不需要先构建Strategy对象再传入构造函数,故构造对象的代码简洁。
   2)灵活机动,不需要类阶层,只要实现相关接口就可以召之即来。如果没有实现相关接口会有明显的编译错误提示。
   这么做的缺点——和c++模板的缺点是一样的:
   1)易读性比较不好,调试比较困难
   2)模板只能定义在.h文件中,当工程大了之后,编译时间十分的变态。
   
   结论:有些场合可以让代码较简洁,但应避免在比较底层的地方使用。
0 0
原创粉丝点击