【发布时间】:2010-12-19 17:11:19
【问题描述】:
我正在编写 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 上指定类型参数。有没有办法重组代码,这样我就不需要指定类型了?
【问题讨论】:
标签: c++ templates pass-by-reference