問題のコンテキストを少し説明してから、いくつかの観察を試みます。特に質問はありません。主にアドバイスを求めているだけです。
ユーザーのテスト/デモに対応する .h ファイルがいくつかあります。各 .h ファイルは、1 つのテスト/デモに対応する 1 つのクラスを定義します。これらのクラスはすべて共通のベースから継承されることに注意してください。
私のメイン ファイルでは、これらすべての .h ファイルを #include し、それぞれのクラスを識別する必要があります。次に、nクラスの場合、n 個のボタンがあります。各ボタンを押すと、対応するクラスの新しいインスタンスが作成されます。解放されると、それは削除されます。ボタンには、独自のインスタンス化を保存できません。押して離したときに作成および削除する必要があります。異なるクラスの 2 つのインスタンスが同時にインスタンス化されないようにすることが不可欠です。
これにより、いくつかの問題が発生します (コンテキストを明確にするため):
- 特定のテスト/デモに関するすべての情報は同じ場所にある必要があります (つまり、テストの名前、テストのファイル名、およびテストのクラス名はすべて、コードの同じ領域にある必要があります。できれば同じ行です。これはちょうどいいデザイン。
- クラスの重要な情報は、その C++ 名です。残念ながら、私の知る限り、そのようなトークンは、それをインスタンス化するコードにのみ書き込むことができます (したがって、たとえば、各テスト/デモに関する情報を含む構造体に格納することはできません; テンプレートを試しましたが、リストでした引数がすべて異なるテンプレートの場合)。
ポイント 1 とポイント 2 により、次の形式のマクロ式を作成することができました。
#define TESTDEMO_DATA(MACRO)\
MACRO("<name 1 here>",class1_symbol,"<filename 1 here>")\
MACRO("<name 2 here>",class2_symbol,"<filename 2 here>")\
MACRO("<name 3 here>",class3_symbol,"<filename 3 here>")\
...
ここから、ボタンを非常に簡単に作成できます (TESTDEMO_DATA を使用して、classn_symbol のインスタンスを作成する関数を生成し、各ボタンに適切なボタンを呼び出させました)。
しかし、今私は行き詰まっています: マルチパスプリプロセッサが必要になるため、ファイル名だけを #include する TESTDEMO_DATA に渡すマクロを書くことは明らかにできません。#includes も個別に書きたくありません。これはポイント 1 に違反するためです。ただし、現時点で考えられる最善の方法です。
アイデア?ありがとう、
イアン