如何在没有虚方法的情况下创建派生类的基类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有虚方法的情况下创建派生类的基类?相关的知识,希望对你有一定的参考价值。
所以我有以下情况:我有一个(C ++)驱动程序不在我的控制之下,我有头文件和库文件,但没有源代码。我想在我的SW中模拟驱动程序(不仅仅是测试,而是使用与实际实现相同的代码)。从基类创建派生类并重新实现所有方法很容易,除非驱动程序库中的任何方法都没有标记为虚拟,因此我无法继承它们并且仍然在我的代码中使用相同的基类型。我无法为模拟版本创建自定义标头,因为我希望能够使用相同的代码进行模拟或真正的驱动程序。我有点难过,如何从这个非虚拟基础创建派生类?
答案
如果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);
以上是关于如何在没有虚方法的情况下创建派生类的基类?的主要内容,如果未能解决你的问题,请参考以下文章