所以我遇到以下情况:我有一个 (C++) 驱动程序不在我的控制范围内,我有头文件和库文件但没有源代码。我想在我的软件中模拟驱动程序(不仅仅是为了测试,而是使用与实际实现相同的代码)。从基类创建一个派生类并重新实现所有方法很容易,除了驱动程序基类中没有任何方法被标记为虚拟,所以我不能继承它们并在我的代码中仍然使用相同的基类型。我不能仅为模拟版本创建自定义 header ,因为我希望能够将相同的代码用于模拟或真实驱动程序。我有点难过,如何从这个非虚拟基类创建派生类?
最佳答案
如果 Driver
不提供虚函数,那么使用 Driver *
的代码使用从 Driver
派生的类的实现是不可能的.
但是,您可以更改代码以根据驱动程序使用的类型进行模板化,并使用两个实例化,一个用于 Driver
,一个用于 SimulationDriver
(甚至不会不必派生自 Driver
)。请注意,在这种特殊情况下(您知道所有需要的实例化),您可以通过使用显式实例化来回避“所有模板代码必须在头文件中”的通常要求。我在我的一个项目中使用了类似的东西。
基本上,目前看起来像这样的代码:
文件.hpp
class Driver;
void process(const Driver *d);
文件.cpp
#include "file.hpp"
#include "Driver.h"
void process(const Driver *d)
{
d->doStuff();
}
会变成这样:
文件.hpp
template <class T_Driver>
void process(const T_Driver *d);
文件.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);
关于c++ - 如何创建没有虚方法的基类的派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49105779/