coco2d-x使用过程中实现反射机制时遇到问题,大神快来看看。

工作中有需求根据类名实例化这个类,故此实现了反射机制,简要代码如下:

class Class;

class MidWare{
    
public:
    virtual void work()=0;
};

template 
class ObjectFactory {
    
public:
    static MidWare *create(){
        return new T();
    }
    
    
    
};



class Class {
private:
    MidWare *(*factory)(void);
    static mapclassMap;
    string name;
    
    Class() {
        
    }
    
public:
    
    static void createSceneByName(const char *className);
    
    template static Class *Register(string className) {
        if (classMap.count(className) == 0) {
            Class *cls = new Class();
            cls->factory = &ObjectFactory::create;
            cls->name = className;
            classMap = cls;
            
        }
        
        return classMap;
    }
    
    static Class *forName(string clsName);
    
    MidWare *newInstace() const;
    string getName() const;
    virtual ~Class();
};



```



原理是使用map将类名和响应类创建的方法的函数指针关联。

使用时注册这个类并继承MidWare这个类然后实现其纯虚函数work即可(实际上就是在map中新增一个关联关系)通过类名创建实例。  

注册实例代码如下:

const Class *Test3Class::theClass = Class::Register("Test3Class");


```



现在的问题是上面注册的这段代码有时候可以有时候不可以,具体表现就是比如有文件A和B,放在A里面就行B里面就不行

报错信息如下请看附件,是一张截图。

有哪位大神遇到过这样的问题,帮助我一下。。。啊啊啊啊,快疯掉了