MVS2008 で「win32 コンソール アプリケーション」プロジェクトとして作成された巨大な C++ ソリューションがあります。作成中の唯一の追加オプションは「プリコンパイル済みヘッダー」でした。
このソリューションでは、さまざまな方法で定義された大量の列挙型があります。それらは常に.h
ファイルで定義されますが、名前空間内、クラス内、または名前空間内のクラス内のいずれかで定義できます。
私はよりエレガントな方法で定義したいと思います (ブルートフォースの方法でそれを行う方法は知っていますが、それは DRY ではありませんよね?) 関数:
void myfunc( const char * )
この列挙型の「文字列値」を渡すと、列挙型のすべての「文字列化された」値が出力されます。
正確には、コードのどこかに次のようなものがある場合:
enum Place
{
Home,
Work
};
関数に文字列「Place」を渡し、関数に文字列「Home」と「Work」を出力できるようにしたいと考えています。
本当にたくさんの列挙型があるので、可能であれば、それらをあまり変更しないようにしたいと思います。理想的には、まったく変更しないでください。小さなパーサーを考えましたが、これは最適ではないと思います。
ちなみに、Boost とは別の外部のものは使用しないように制限されていますが、マクロは使用できます。列挙型の「ループ」と「列挙型の文字列」内のループの概念を何らかの方法で定義できるようにしたいのですが、その方法がまったくわかりません。
すべてのアイデアを歓迎します。