@sbi は既にコード生成について話しているので、例を挙げましょう。
多くの項目の列挙があり、その要素ごとに一連の関数を生成したいとします...
1 つの解決策は、この複数の包含のトリックを使用することです。
// myenumeration.td
MY_ENUMERATION_META_FUNCTION(Item1)
MY_ENUMERATION_META_FUNCTION(Item2)
MY_ENUMERATION_META_FUNCTION(Item3)
MY_ENUMERATION_META_FUNCTION(Item4)
MY_ENUMERATION_META_FUNCTION(Item5)
次に、人々はそれを次のように使用します。
#define MY_ENUMERATION_META_FUNCTION(Item_) \
case Item_: return #Item_;
char const* print(MyEnum i)
{
switch(i) {
#include "myenumeration.td"
}
__unreachable__("print");
return 0; // to shut up gcc
}
#undef MY_ENUMERATION_META_FUNCTION
これが良いかハックかはあなた次第ですが、列挙型に新しい値が追加されるたびにすべてのユーティリティ関数をクロールする必要がないことは明らかです。