私の問題は、コードを整理して、同じメソッドのデバッグバージョンとリリースバージョンを作成し、異なるターゲット プラットフォームに対して同じメソッドの複数の定義を作成できるようにすることです。
基本的に、問題の核心は両方で同じです。同じ署名が必要ですが、異なる定義が関連付けられている必要があります。
ファイルシステム上でコードを整理し、コンパイルと本番用に整理して、これをクリーンで分離した状態に保つための最良の方法は何ですか?
ありがとう。
私の問題は、コードを整理して、同じメソッドのデバッグバージョンとリリースバージョンを作成し、異なるターゲット プラットフォームに対して同じメソッドの複数の定義を作成できるようにすることです。
基本的に、問題の核心は両方で同じです。同じ署名が必要ですが、異なる定義が関連付けられている必要があります。
ファイルシステム上でコードを整理し、コンパイルと本番用に整理して、これをクリーンで分離した状態に保つための最良の方法は何ですか?
ありがとう。
// #define DEBUG - we're making a non debug version
#ifdef DEBUG
// function definition for debug
#else
// function definition for release
#endif
異なるオペレーティング システムでも同じことができます。もちろん、すべてを再コンパイルするという問題があり、これは C++ では厄介な問題になる可能性があります。
コンパイラで許可されている場合は、各バージョンのソース ファイルを個別のサブフォルダ (例: #include "x86_d/test.h"
) に保持してから、グローバル マクロ定義を使用してフローを制御できます。
#define MODE_DEBUG
#ifdef MODE_DEBUG
#include "x86dbg/test.h"
#else
#include "x86rel/test.h"
#endif
同じファイルに 2 つの異なる定義を含めることができるように、メンバー関数の定義にも同様の構造を使用できます。多くのコンパイラは、グローバル マクロにも独自の定義を使用するため、上記の代わりに、コンパイラ フラグを介して何かを使用したり、定義したり#define MODE_DEBUG
することもできます。#ifdef _CPP_RELEASE
次のように、ヘッダー ファイルではなくソース レベルで介入することをお勧めします (同じインターフェイスを維持するため)。
//Foo.h
class Foo{
void methodA();
void methodB();
};
//Foo.cpp
// common method
Foo::methodA() { }
#ifdef _DEBUG_
Foo::methodB() { }
#elif _PLATFORM_BAR_
Foo::methodB() { }
#else
Foo:methodB() { }
#endif
代わりに、すべてを分離したままにしたい場合は、より高いレバーで作業する必要があります。プリプロセッサは、条件付きで .cpp ファイルを別のファイルの代わりに含めるには十分ではありません。メイクファイルまたは使用するものを使用する必要があります。
もう 1 つの選択肢は、特定のプラットフォーム以外では単純に消えるソース ファイルを使用することです。たとえば、次のようになります。
//Foo.h
class Foo{
void methodA();
void methodB();
};
//FooCommon.cpp
void Foo::methodA() { }
//FooDebug.cpp
#ifdef _DEBUG_H
void Foo::methodB() { }
#endif
//FooRelease.cpp
#ifndef _DEBUG_H_
void Foo::methodB() { }
#endif