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

本文通过C++模板展示了如何模拟多态,并对比了与传统多态的区别。模板模拟多态简化了对象构造,提高了灵活性,但可能导致代码可读性下降,且大型项目中编译时间过长。适用场景为代码简洁性要求较高,但在底层使用需谨慎。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    c++的模板是个很强很暴力的东西,可以轻松地模拟多态。下面举个例子:
====================================================================
#include <iostream>
#include <string>

using namespace std;

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

class AddDecorator
{
public:
    void printHead()
    {
        cout << "++++++++++" << endl;
    }
    void printTail()
    {
        cout << "++++++++++" << endl;
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值