关于模板类中静态成员变量的问题
#include <iostream>#include <map>#include <functional>#include <string>#define DEFINE_CLASS(class_name) char NameArray##class_name[]=#class_name; class class_name:public Register<class_name, NameArray##class_name>//回调函数typedef void* (*CreateFunction)(void);//工厂类class ZFactory{private: //存储类名字和相应的创建对象函数 static std::map<std::string, CreateFunction> m_clsMap;public: static void *getClassByName(std::string name) { std::map<std::string, CreateFunction>::const_iterator find; find = m_clsMap.find(name); if (find != m_clsMap.end()) { return find->second(); } else { return NULL; } } static void RegistClass(std::string name, CreateFunction methond) { m_clsMap.insert(make_pair(name, methond)); }};//类注册class ZRegisterClass {public: ZRegisterClass(std::string name, CreateFunction methond) { ZFactory::RegistClass(name, methond); }};//模板类,具体的实现template <class T, const char name[]>class Register{public: [color=#FF0000] static const ZRegisterClass rc; [/color] Register() { const ZRegisterClass tmp = rc; //ZFactory::RegistClass(name, CreateInstance); } //返回类的实例 static void *CreateInstance() { return new T; } };std::map<std::string, CreateFunction> ZFactory::m_clsMap;[color=#FF0000]template <class T, const char name[]>const ZRegisterClass Register<T, name>::rc(name, Register<T, name>::CreateInstance);[/color]