2

私の問題は、コードを整理して、同じメソッドのデバッグバージョンとリリースバージョンを作成し、異なるターゲット プラットフォームに対して同じメソッドの複数の定義を作成できるようにすることです。

基本的に、問題の核心は両方で同じです。同じ署名が必要ですが、異なる定義が関連付けられている必要があります。

ファイルシステム上でコードを整理し、コンパイルと本番用に整理して、これをクリーンで分離した状態に保つための最良の方法は何ですか?

ありがとう。

4

3 に答える 3

2
// #define DEBUG   -  we're making a non debug version


#ifdef DEBUG

// function definition for debug

#else

// function definition for release

#endif

異なるオペレーティング システムでも同じことができます。もちろん、すべてを再コンパイルするという問題があり、これは C++ では厄介な問題になる可能性があります。

于 2012-10-04T12:15:43.243 に答える
1

コンパイラで許可されている場合は、各バージョンのソース ファイルを個別のサブフォルダ (例: #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

于 2012-10-04T12:22:14.280 に答える
1

次のように、ヘッダー ファイルではなくソース レベルで介入することをお勧めします (同じインターフェイスを維持するため)。

//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
于 2012-10-04T12:20:00.353 に答える