easy plugin

#include <string.h>
#include <iostream>
#include <list>
#include <memory>
class polygon {
public:
    polygon() = default;
    virtual ~polygon() = default;
    virtual double area() const = 0;
};
class triangle : public polygon {
public:
    virtual double area() const override {
        std::cerr << "triangle." << std::endl;
        return 0;
    }
};
class polygon_plugin {
public:
    void add_plugin(const char *name) {
        if (0 == strcasecmp(name, "triangle")) {
            plugin_list.push_front(std::unique_ptr<polygon>(new triangle));
        }
    }
    void run_plugin() {
        for (auto &plugin : plugin_list) {
            plugin->area();
        }
    }
private:
    std::list<std::unique_ptr<polygon>>plugin_list;
};
int main() {
    polygon_plugin pp;
    pp.add_plugin("triangle");
    pp.run_plugin();
    
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值