我将尝试稍微描述一下问题的背景,然后进行一些观察。我没有具体的问题;我只是在寻找建议,主要是。
我有许多 .h 文件,它们对应于用户的测试/演示。每个 .h 文件定义一个类对应一个测试/演示。应该注意的是,所有这些类都继承自一个公共基础。
在我的主文件中,我需要#include 所有这些 .h 文件并标识它们的每个类。然后,对于n 个类,将有n 个按钮。每个按钮在按下时都会创建它对应的类的一个新实例。释放时,它会删除它。按钮不能存储自己的实例化;它们必须在按下和释放时创建和删除;不能同时实例化不同类的两个实例。
这引发了一些问题(并澄清上下文):
- 关于特定测试/演示的所有信息都应该在同一个地方(即,测试的名称、测试的文件名和测试的类名都应该在代码的同一区域。最好在同一行。这是只是好的设计。
- 该类的一个关键信息是它的 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 实例的函数,然后让每个按钮调用正确的按钮)。
但是现在我被困住了:我显然无法编写一个宏来传递给 TESTDEMO_DATA ,它只会 #include 文件名,就像我可能喜欢的那样,因为这需要一个多通道预处理器。我也不想单独编写#includes,因为这违反了第1点,尽管这是我现在能想到的最好的。
想法?谢谢,
伊恩