現在、cpu
またはgpu
のデータ処理をサポートするクラスを作成して、プリプロセッサ定義を使用して、含めるファイルを決定します(header
)。私は両方のバリアントが必要になり同じクラスの2つの異なる実装をコンパイルする
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。
**私は多くの人に継承についてのコメントを与えるつもりです。しかし、これらの2つの異なるバージョンは、gpu/cpuへの単一行メソッド呼び出しとは別のコードを持っていますが、2つの別個のサブクラスを作成すれば十分ですが、30ページ以上のコードをコピー/ペーストする時間はかかりません。 –
これは、実際には、宣言されたすべての関数が単一の名前空間と2つのcppファイル、すなわち共通インタフェースを実装する "cpu_work.cpp"と "gpu_work.cpp"と同一である単一のインタフェース "backend.h"彼ら自身の特別な方法。ビルド時に正しい実装ファイルをリンクします。 – user4581301
これを行う正しい方法は、C++では継承です。親クラスから継承したサブクラスを作成し、読み始める方法を説明しているC++ブックの章を開きます。単一の基本クラスと、適切なCPUまたはGPU固有の機能を実装する2つのサブクラスがあります。 –