目前我正在编写一个类,该类支持使用预处理器定义的cpu
或gpu
上的数据处理,以确定要包含哪个header
文件。编译同一类的两种不同实现
IE
#ifdef CPU_work
#include "cpu_backend.h"
#endif
#ifdef GPU_work
#include "gpu_backend.h"
#endif
class Work {
//Implementation dependant upon included header
}
然而,也许情况下,我需要这两个变种。反正我有可以做类似....
namespace CPU {
#define CPU_work
//Generate implementation of WorkClass with cpu_backend.h
}
namespace GPU {
#define GPU_work
//Generate implementation of WorkClass with gpu_backend.h
}
和为此决定我通过类似想要的实现......
CPU::Work cpuObject;
GPU::Work gpuObject;
会很乐意与任何变通办法也。非常感谢JJ。
**我假设我将有无数人对继承发表评论。然而,这两个不同版本的代码除了调用gpu/cpu的单行方法之外,其他代码都是相同的,尽管只需创建两个独立的子类即可,我不想花时间复制/粘贴30多页代码。 –
这实际上是单个接口“backend.h”的好例子,其中所有声明的函数都与单个名称空间和两个cpp文件“cpu_work.cpp”和“gpu_work.cpp”相同,实现了通用接口他们自己的特殊方式。在构建时链接正确的实现文件。 – user4581301
在C++中这样做的正确方法是继承。打开C++书中的章节,解释如何创建从父类继承的子类,然后开始阅读。您将拥有一个基类和两个实现相应的CPU或GPU特定功能的子类。 –