需要使用私有继承的设计帮助

时间:2013-07-25 14:03:31

标签: c++ inheritance multiple-inheritance private-inheritance

我遇到以下情况的问题:库(CardReader)实现ISO7816协议并与智能卡通信(由我实现)。

我必须实现使用此库的专有协议。

在CardReader中有以下类APDURequest和APDUResponse。 CardReader类实现了发送和接收这些消息的所有功能。

class APDUResonse
{
public:   
    /* ctor, copy ctor, move ctor, copy =, and move = operators. */
    //...
    int statusWord() const { return ...; }
    int sw1() const { return ...; }
    int sw2() const { return ...; }   
};

另一方面,在我的软件中,我有一个与层次结构无关的实现,来自智能卡的消息。这是基类的接口:

enum class MessageResKind { /* ... */ };

class IMessageRes
{
public:
    virtual ~IMessageRes() {};
    virtual int statusWord() const = 0;
    virtual int sw1() const = 0;
    virtual int sw2() const = 0;
    virtual MessageResKind kind() const = 0;       
    virtual void print( std::ostream& ) = 0;
};

现在我怀疑是如何派出专门的班级......我的第一次尝试是:

class ADMessageResATR : public IADMessageRes, private iso7816::APDUResponse
{
public:

    // import iso7816::APDUResponse ctor
    using iso7816::APDUResponse::APDUResponse;

    using iso7816::APDUResponse::sw1;
    using iso7816::APDUResponse::sw2;
    using iso7816::APDUResponse::statusWord;

    ADMessageResKind kind() const
    {
        return ADMessageResKind::ATR;
    }

    void print() const {}
};

但我编译时错误:无法实例化抽象类ADMessageResATR:statusWord,sw1和sw2 abstract

1 个答案:

答案 0 :(得分:0)

不确定您要实现的目标,但如果您想公开界面并使用库实现,您可以这样做:

class ADMessageResATR : public IADMessageRes, private iso7816::APDUResponse
{
public:

    int sw1() const {return iso7816::APDUResponse::sw1();}
...
};