#include "new_class_id.h" #include "new_object_list.h" #include class BaseObject { public: void setName(const std::string& name) { this->_objectName = name; }; const std::string& name() const { return _objectName; }; bool operator==(const std::string& name) const { return _objectName == name; }; protected: template inline void registerObject(T* object, NewObjectList& objectList) { _id.registerObject(object, objectList); }; private: NewClassID _id; std::string _objectName; }; class Test : public BaseObject { public: Test(); ~Test(); NewObjectListDeclaration(Test); //ObjectListDeclaration(Test); }; NewObjectListDefinition(Test); Test::Test() { this->registerObject(this, Test::objectList); std::cout << "Test()\n"; }; Test::~Test() { std::cout << "~Test()\n"; } class Bone : public BaseObject { public: Bone() { this->registerObject(this, Bone::objectList); std::cout << "Bone()\n"; }; ~Bone() { std::cout << "~Bone()\n"; }; NewObjectListDeclaration(Bone); }; NewObjectListDefinition(Bone); int main() { Test* test = new Test(); test->setName("Testing"); Test::objectList.debug(); delete test; Test::objectList.debug(); Bone* bone = new Bone(); delete bone; std::cout << NewObjectListBase::classCount() << std::endl; }