2016-03-24 10 views
0

に基づいて、異なる長さの列挙型を定義し、私は言い換えると、次のは#defineで定義数

enum Biscuits{ 
b1, b2, b3, b4 
} 

のように見える列挙型をしたい私は

#define l 4 

を持っていると仮定し、ビスケットの長さが依存しています私は何であるか。私が考えることができる唯一の方法は、b1、b2、b3、b4を含む別の#define変数を作成し、それを使ってビスケットを定義する方法です。他の方法はありますか?

+0

プリプロセッサのマジックを使用する必要があります。それは恐ろしいですが、Boost.Preprocessorはちょっと役立ちます。それは間違いなく行うことができます。 –

+0

プリプロセッサの再帰を使用する必要があるかもしれません。 – DimChtz

+0

プリプロセッサ再帰は、私が探していたキーワードです。 –

答えて

0

(あなたは多くのバリエーションを持っていない限り)それをシンプルに保つ:

#if l == 1 
enum Biscuits{ b1 }; 
#elif l == 2 
enum Biscuits{ b1, b2 }; 
#elif ... 
#endif 

をプリプロセッサの魔法を回避には、読みやすさを向上させます。

0

あなたのコードをどのように柔軟にするか分かりません。

enum Biscuits{ 

#ifndef l 
#error l is not defined 
#else 
#if (l >= 2) 
    b1, b2 
#endif 

#if (l >= 4) 
    , b3, b4 
#endif 

#if (l >= 6) 
    , b5, b6 
#endif 

#if (l >= 8) 
    , b7, b8 
#endif 

#endif 

};