Нужна помощь в разработке с использованием частного наследования

У меня проблема со следующей ситуацией: библиотека (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 ответ

Решение

Не уверен, чего вы пытаетесь достичь, но если вы хотите показать интерфейс и использовать реализацию библиотеки, вы можете сделать что-то вроде этого:

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

    int sw1() const {return iso7816::APDUResponse::sw1();}
...
};
Другие вопросы по тегам