我想在类名列表上运行宏以避免复制/粘贴错误和麻烦.
想象一下,作为一个简单的例子,SDK中的每个类都需要在使用之前调用静态分配方法.因此,每次添加新类时,我都必须在初始化时手动添加以下行:
MyNewClass::allocate();
Run Code Online (Sandbox Code Playgroud)
我还需要为初始化和销毁做同样的事情.
所以,不是每次都手动执行此操作,我想知道是否有办法在某处编写所有类名的列表,然后定义一个宏来为列表中的每个类调用相应的方法.有些东西:
#define ALLOCATE( TheClass ) TheClass ## ::allocate();
Run Code Online (Sandbox Code Playgroud)
但是TheClass我不想仅仅作为参数传递,而是要传递我的类列表.所以致电:
ALLOCATE_ALL( ClassA, ClassB, ClassC )
Run Code Online (Sandbox Code Playgroud)
它会扩展到:
ClassA::allocate();
ClassB::allocate();
ClassC::allocate();
Run Code Online (Sandbox Code Playgroud)
最后,我希望能够定义一个类列表并让多个宏迭代它.有些东西:
ALLOCATE_ALL( MyClassList )
INIT_ALL( MyClassList )
DESTROY_ALL( MyClassList )
Run Code Online (Sandbox Code Playgroud)
我已经看过可变参数宏,但是,如果我理解正确的概念,你必须定义尽可能多的宏作为参数的最终数量; 在我的情况下,这根本不可行.
这有可能吗?
感谢您的任何帮助和/或反馈.
Lin*_*cer 10
如果您对拥有一个类列表感到满意,可以使用以下技巧:
#define MY_CLASSES X(ClassA) X(ClassB) X(ClassC)
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
#define X(a) a::allocate();
MY_CLASSES
#undef X
Run Code Online (Sandbox Code Playgroud)
要做其他事情,你可以这样做:
#define X(a) a::init();
MY_CLASSES
#undef X
Run Code Online (Sandbox Code Playgroud)