に基づいて、異なる長さの列挙型を定義し、私は言い換えると、次のは#defineで定義数
enum Biscuits{
b1, b2, b3, b4
}
のように見える列挙型をしたい私は
#define l 4
を持っていると仮定し、ビスケットの長さが依存しています私は何であるか。私が考えることができる唯一の方法は、b1、b2、b3、b4を含む別の#define変数を作成し、それを使ってビスケットを定義する方法です。他の方法はありますか?
に基づいて、異なる長さの列挙型を定義し、私は言い換えると、次のは#defineで定義数
enum Biscuits{
b1, b2, b3, b4
}
のように見える列挙型をしたい私は
#define l 4
を持っていると仮定し、ビスケットの長さが依存しています私は何であるか。私が考えることができる唯一の方法は、b1、b2、b3、b4を含む別の#define変数を作成し、それを使ってビスケットを定義する方法です。他の方法はありますか?
(あなたは多くのバリエーションを持っていない限り)それをシンプルに保つ:
#if l == 1
enum Biscuits{ b1 };
#elif l == 2
enum Biscuits{ b1, b2 };
#elif ...
#endif
をプリプロセッサの魔法を回避には、読みやすさを向上させます。
あなたのコードをどのように柔軟にするか分かりません。
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
};
プリプロセッサのマジックを使用する必要があります。それは恐ろしいですが、Boost.Preprocessorはちょっと役立ちます。それは間違いなく行うことができます。 –
プリプロセッサの再帰を使用する必要があるかもしれません。 – DimChtz
プリプロセッサ再帰は、私が探していたキーワードです。 –