【问题标题】:Composed Interface class组合接口类
【发布时间】:2014-06-01 15:03:32
【问题描述】:

是否有任何正确的方法来声明一个类(接口)Limit,它可以用作接口ParamLim的“组合” >?

基础接口类ParamLim

class Param {
public:
    virtual char *toStr(void) = 0;
};

class Lim {
public:
    virtual char *toStrL(void) = 0;
};

ParamAParamB实现接口Param

class ParamA : public Param {
public:
    virtual char *toStr(void){ return "A";};    
};

class ParamB : public Param {
public:
    virtual char *toStr(void){ return "B";} 
};

LimitALimitB 额外实现了 Lim

class LimitA : public ParamA, public Lim {
public:
    virtual char *toStrL(void){ return "LA";}
};

class LimitB : public ParamB, public Lim {
public:
    virtual char *toStrL(void){ return "LB";}
};

使用 Limit 我想访问方法 toStr()toStrL()

class Limit : public Param, public Lim {
};

void example(void){
    LimitA limitA;
    LimitB limitB;
    Limit *limit = polymorphic_downcast<Limit *>(&limitB);  // unable to type cast correctly
    char *str1 = limit->toStr();
    char *str2 = limit->toStrL();
}

【问题讨论】:

    标签: c++ inheritance architecture interface


    【解决方案1】:

    不,这是不可能的。运行时只能知道您在类声明中显式继承的派生类。以后不能插入额外的类。

    【讨论】:

    • 看来我遇到了架构设计问题。也许可以使用某种设计模式或其他方式解决同时访问 ParamLim 方法。
    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2015-01-19
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多