1

我遇到以下情况的问题:库(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 ...; } 
}; 

在我的软件另一方面我有一个层次的独立implentare的消息,并从智能卡。这是基类的接口:

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:状态字,SW1和SW2抽象

回答

0

不知道你正在尝试什么来实现,但如果你希望公开接口,并使用库实现,你可以做这样的事情:

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

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

我认为导入iso7816 :: APDUResponse函数已经足够了。 –

+0

在这种情况下,iso7816 :: APDUResponse析构函数需要虚拟吗? –