惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Palo Alto Networks Blog
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Schneier on Security
Engineering at Meta
Engineering at Meta
I
InfoQ
L
LangChain Blog
Cyberwarzone
Cyberwarzone
T
Tenable Blog
WordPress大学
WordPress大学
P
Privacy & Cybersecurity Law Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Last Watchdog
The Last Watchdog
Last Week in AI
Last Week in AI
Cloudbric
Cloudbric
S
SegmentFault 最新的问题
爱范儿
爱范儿
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
AI
AI
T
Tor Project blog
I
Intezer
T
Threatpost
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Visual Studio Blog
N
News and Events Feed by Topic
Latest news
Latest news
S
Security Affairs
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog RSS Feed
C
Cybersecurity and Infrastructure Security Agency CISA
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
S
Securelist

博客园 - Clingingboy

冒个泡,刷刷存在感 使用文件映射和信号量来进程间通信 Xperf Basics: Recording a Trace (the easy way)(转) Xperf Basics: Recording a Trace(转) Xperf Analysis Basics(转) Android相关sdk使用 Uniscribe文字自动换行 Chrome RenderText分析(2) c++智能指针 codepage IMLangCodePages GUI 快捷键的实现思路 Menu实现逻辑 控件保持多种绘图状态的做法 2个函数宏技巧 绘图 Painter转接口封装的方式 DirectUI消息循环的简单封装 c++以代理的方式来实现接口化编程 c++对象工厂 VC++ 使用attributes定义接口
使用模板来解决接口继承问题
Clingingboy · 2013-11-04 · via 博客园 - Clingingboy

使用模板来解决接口继承问题

2013-11-04 20:14  Clingingboy  阅读(549)  评论()    收藏  举报

一.定义2个有继承关系的接口

struct IA
{
    virtual void Test1()=0;
};

struct IB:public IA
{
    virtual void Test2()=0;
};

二.定义2个类来实现

class A:public IA
{
    virtual void Test1() {}
};

class B:public IB
{
public:
    virtual void Test2() 
    {

    }
};

类B将无法使用,必须重新实现IA的Test1方法,如下代码

class B:public IB
{
public:
    virtual void Test2() {}
    virtual void Test1() {}
};

这样的做法使得接口继承非常麻烦

三.使用模板来实现接口单继承

c#和java都是可以单类和多接口继承,c++则可以多个类继承,这使得多继承设计上带来麻烦,尽量使用单继承来避免问题.

先看一个非模板的实现

class CA: public IB
{
public:
    virtual void Test1() {}
};

class CB:public CA
{
public:
    virtual void Test2() {}
};

以上的定义,CB可以声明,CA则会编译错误,根据上面的思想,可以将其改造为模板版本

template<class IActual>
class CA: public IActual
{
public:
    virtual void Test1() {}
};

template<class IActual>
class CB: 
    public CA<IActual>
{
public:
    virtual void Test2() {}
};

template<class IActual>
class CC: public CB<IC>
{
public:
    virtual void Test3() {}
};

测试代码:

int main()
{
    CB<IB> b;
    CC<IC> c;
    IB *p=dynamic_cast<IB*>(&b);
    p->Test2();
    return 0;
};