作者:深圳教育在线 来源:www.szedu.net 更新日期:2009-8-12
#pragma once #include <list> class Reflector { public: virtual ~Reflector(); virtual const char* getClassName() = 0; static std::list<Reflector*> m_lstRef; }; #pragma once #include <list> class Reflector { public: virtual ~Reflector(); virtual const char* getClassName() = 0; static std::list<Reflector*> m_lstRef; }; Reflector.cpp: view plaincopy to clipboardprint? #include "Reflector.h" Reflector::~Reflector() { } std::list<Reflector*>Reflector:: m_lstRef; #include "Reflector.h" Reflector::~Reflector() { } std::list<Reflector*>Reflector:: m_lstRef; A.h: view plaincopy to clipboardprint? #pragma once #include "Reflector.h" class A : public Reflector { public: virtual ~A(); //如果你觉得重复,可以把函数getClassName弄成宏 virtual const char* getClassName(); }; #pragma once #include "Reflector.h" class A : public Reflector { public: virtual ~A(); //如果你觉得重复,可以把函数getClassName弄成宏 virtual const char* getClassName(); }; A.cpp: view plaincopy to clipboardprint? #include "A.h" A::~A() { } const char* A::getClassName() { return "A"; } #include "A.h" A::~A() { } const char* A::getClassName() { return "A"; } main.cpp: view plaincopy to clipboardprint? #include "Reflector.h" #include "A.h" #include <iostream> #include <string> using namespace std; void init() { Reflector::m_lstRef.push_back(new A); } int main() { init(); //从别处(比如配置文件)得知要创建的是对象A const std::string className = "A"; for (std::list<Reflector*>::iterator it = Reflector::m_lstRef.begin(); it != Reflector::m_lstRef.end(); ++it) { if (className == (*it)->getClassName()) { cout << "A" << endl; } } return 0; } #include "Reflector.h" #include "A.h" #include <iostream> #include <string> using namespace std; void init() { Reflector::m_lstRef.push_back(new A); } int main() { init(); //从别处(比如配置文件)得知要创建的是对象A const std::string className = "A"; for (std::list<Reflector*>::iterator it = Reflector::m_lstRef.begin(); it != Reflector::m_lstRef.end(); ++it) { if (className == (*it)->getClassName()) { cout << "A" << endl; } } return 0; }
|