我在以下情况下有问题:库(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抽象
最佳答案
不确定要实现的目标,但是如果要公开接口并使用库实现,可以执行以下操作:
class ADMessageResATR : public IADMessageRes, private iso7816::APDUResponse
{
public:
int sw1() const {return iso7816::APDUResponse::sw1();}
...
};