特定のハードウェア、ファームウェア、およびドライバに依存するクラスへの参照を取るC++コードを書いています。私はテストのためのインターフェイスをスタブアウトしたいと思いますが、私に困惑しているロードブロッキングがいくつかあります。私がインターフェースしているクラスは自動生成されているので、インターフェースを定義する基本クラスから継承することはできません。私が呼び出す必要のあるメソッドは仮想ではないので、私のテストスタブはそれを継承してメソッドをオーバーライドできません。任意のタイプのクラステンプレートへの参照を取る
私は、テンプレート化されたラッパークラスを作成して、それが入力されたクラスにコールをリダイレクトするだけでよいことに気付きました。私は次のようなものを持っています...
template< class T >
class DriverInterface
{
public:
DriverInterface(T& driverImpl):
m_driverImpl(driverImpl)
{
}
virtual ~DriverInterface(void)
{
}
virtual void GetDataBuffer(char *&pData, int &bufLen)
{
m_driverImpl.GetDataBuffer(pData, bufLen);
}
virtual void WriteDataBuffer(char *pData, int bufLen)
{
m_driverImpl.WriteDataBuffer(pData, bufLen);
}
protected:
T& m_driverImpl;
private:
};
class DriverWriter
{
public:
DriverWriter(DriverInterface& driverInterface);
//etc
}
残念なことにコンパイラはDriverWriterクラスのDriverInterfaceに型パラメータを指定したいと思っています。型を指定する必要がないようにコードを再構成する方法はありますか?
1を書くことができます。まさに私が言うつもりだった。 – Puppy
ありがとうございます。今明らかになったようですが、私は確かに解決策を見ることができませんでした。 – effnish