0

列挙値に基づいて、コンパイルするコードの一部を選択したいと考えています。では、enum の使用とプリプロセッサ ディレクティブを組み合わせて、この目標を達成するにはどうすればよいでしょうか? 例は次のようなものです。

#include <iostream>

enum CODE {BINARY, PERMUTATION, BYVALUE};

#define ENCODING(x) (x)

using namespace std;

int main()
{
    CODE code = PERMUTATION;
#if ENCODING(code) == BINARY
    cout << "code: BINARY" << endl;
#elif ENCODING(code) == PERMUTATION
    cout << "code: PERMUTATION" << endl;
#elif ENCODING(code) == BYVALUE
    cout << "code: BYVALUE" << endl;
#endif
    return 0;
}

明らかに、これは常に最初の #if ステートメントを取り、「code: BINARY」を表示するため、私の目的を達成するには正しくありません。列挙型を使用してコンパイルされたセグメントを制御する方法はありますか? ありがとうございました。

4

1 に答える 1

4

ランタイム変数値を使用してコンパイル (前処理) プロセスを制御しようとしています。それは不可能。

前処理段階でコンパイルするコードの部分を選択するか ( を使用#define)、switch必要なエンコーディングを選択するステートメントを作成する必要があります (codeが定数の場合、最適化コンパイラは効率的に を削除しますswitch)。

于 2013-05-09T10:10:54.247 に答える