C++ 使用macro create instance

最近要接手一個新的項目,項目是C++寫的,裏面使用了一些macro,還是有些意思的。
假如現在有一個父類ParentClass,這個父類有很多子類,這些子類都需要實現一個實例化的函數,當然可以在父類中定義一個,之後子類override,使用macro可能更好些,只要做好規範,大家就照着標準寫就可以了,生出來的函數都是一致的。那麼我們就可以實現下面兩個宏,一個是declare,一個implement。

#define DECLARE_SUB_CLASS(_class_name) \
public :                               \
static ParentClass *createSubObject(int parameter); 

#define IMPLEMENT_SUB_CLASS (_class_name,) \
ParentClass *_class_name:: createSubObject(int parameter) \
{                                                        \                                                                               
_class_name subObj;                                      \
subObj = new _class_name(parameter)                      \
return subObj;                                           \
} 

下面就是使用方法了
// Son1Class.h

class Son1Class: public ParentClass {
DECLARE_SUB_CLASS(Son1Class);
Public:
Son1Class(int parameter);
virtual ~ Son1Class();
}

// Son1Class.cpp

IMPLEMENT_SUB_CLASS(Son1Class);
Son1Class::Son1Class(int parameter):ParentClass(parameter) {
// implememt
}
Son1Class::~Son1Class() {
// implement
}

這是用宏生成子類的創建函數,其他函數當然也是可以的。如果子類的對象存儲在一個統一列表中,邏輯需要對這個列表調用某一個統一的函數,那就可以使用多態,通過上面的方法統一生成相應函數就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章