所以我有以下情况:我有一个(C ++)驱动程序不在我的控制之下,我有头文件和库文件,但没有源代码。我想在我的SW中模拟驱动程序(不仅仅是测试,而是使用与实际实现相同的代码)。从基类创建派生类并重新实现所有方法很容易,除非驱动程序库中的任何方法都没有标记为虚拟,因此我无法继承它们并且仍然在我的代码中使用相同的基类型。我无法为模拟版本创建自定义标头,因为我希望能够使用相同的代码进行模拟或真正的驱动程序。我有点难过,如何从这个非虚拟基础创建一个派生类?
答案 0 :(得分:2)
如果Driver
不提供虚函数,则使用Driver *
的代码使用来自Driver
的类的实现是不可能的。
但是,您可以根据驱动程序使用的类型更改您的代码,并使用两个实例,一个用于Driver
,另一个用于SimulationDriver
(甚至不必从Driver
)。请注意,在这种特殊情况下(您知道所有需要的实例化),您可以通过使用显式实例来回避“所有模板代码必须在头文件中”的通常要求。我在我的一个项目中使用类似的东西。
基本上,代码目前看起来像这样:
<强> file.hpp 强>
class Driver;
void process(const Driver *d);
<强> file.cpp 强>
#include "file.hpp"
#include "Driver.h"
void process(const Driver *d)
{
d->doStuff();
}
将更改为如下所示:
<强> file.hpp 强>
template <class T_Driver>
void process(const T_Driver *d);
<强> file.cpp 强>
#include "file.hpp"
#include "Driver.h"
#include "SimulationDriver.h"
template <class T_Driver>
void process(const T_Driver *d)
{
d->doStuff();
}
template void process(const Driver *d);
template void process(const SimulationDriver *d);