Je cherche une méthode ou un moyen de générer une liste de typedefs et une liste d'instanciations d'objets à partir d'une liste des macro-invocations, en définissant les types de classe et les paramètres constructeurs de ces objets.Macro C/C++: Comment générer deux sections séparées de code avec une seule macro (bibliothèque de préprocesseur booster?)
Cela devrait ressembler au code (ne fonctionne pas) ci-dessous. Le problème à résoudre est un moyen de générer deux listes différentes sur une liste d'invocations de macros. Je suppose que c'est un problème à résoudre avec la partie bibliothèque de préprocesseur boost mais j'ai maintenant de la colle comment faire.
/////////////////////////////////////////////////////////////////////////////////
// MACRO-Definitions
#define DEF_OBJECT_TYPE(name, class, contructor_params) \
typedef class name ## type;
name ## type* name;
#define DEF_OBJECT_RUN(name, class, contructor_params) \
name ## type* name = new name ## type contructor_params; \
#define DEF_OBJECTS(definitions) \
/* Type-Header */ \
definitions \
/* Type-Footer */ \
/* Run-Header */ \
definitions \
/* Run-Footer */
#define OBJECT(name) (dynamic_cast<name ## type*>(name))
/////////////////////////////////////////////////////////////////////////////////
// Object-Definitions
DEF_OBJECTS(
DEF_OBJECT(Object1, CClass1, ("par1"))
DEF_OBJECT(Object2, CClass2, ("par1", "par1"))
)
/////////////////////////////////////////////////////////////////////////////////
// This shall be the result of the macro expansion
// shall expand to:
struct MyClass {
typedef class Object1type;
Object1type* Object1;
typedef class Object2type;
Object2type* Object2;
void Run();
}
void MyClass::Init() {
Object1type* Object1 = new Object1type("par1");
Object2type* Object2 = new Object2type("par1", "par2");
}
// end of expansion
/////////////////////////////////////////////////////////////////////////////////
// I want to use these automatic created objects in this way:
void MyClass::Run() {
OBJECT(Object1)->method_class1(1);
OBJECT(Object2)->method_class2(1,2);
}
Merci pour la solution rapide - cela fonctionne! La génération de TYPE0_DEF, TYPE1_DEF etc.pp. macros coutures d'être un candidat pour la bibliothèque boost-preprocessor. Je vais essayer cela dès que possible. Merci encore! – Marcel