目前我正在編寫一個類,該類支持使用預處理器定義的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特定功能的子類。 –