c++ - 需要使用私有(private)继承的设计帮助

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

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

我必须实现一个使用这个库的专有协议(protocol)。

在 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 ...; }   
};

另一方面,在我的软件中,我有一个独立于层次结构的实现与智能卡之间的消息。这是基类的接口(interface):

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 and sw2 abstract

最佳答案

不确定您要实现什么,但是如果您想公开接口(interface)并使用库实现,您可以这样做吗:

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

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

关于c++ - 需要使用私有(private)继承的设计帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860240/

相关文章:

c++ - boost asio 打开更多的一个套接字

c++ - 具有非成员函数的 std::vector 中的多态性

c++ - 删除 C++ 继承中虚拟类成员的代码重复

c++ - (初学者)使用 Java 示例作为起点的构造函数和方法中的 C++ 继承

c++ - 使用多重继承时的编译错误

获取/设置多个成员的 C++ 类函数

c++ - 为什么 range::unique_copy 不能与 std::ostream_iterator 一起使用?

java - 如何静态实例化依赖于实例方法的成员?

c++ - 如何在多重继承中实现同名虚函数

c++ - 使用派生类类型初始化模板类的静态数组