1

我有这个 typedef 来定义一个函数指针。

typedef Script*(*CreateObjectFn)(TiXmlElement* node);

我为我的目的创建了一个通用容器,其作用类似于地图。它被称为字典,所以我在这样的类中创建了一个 CreateObjectFn 字典:

class ScriptBank
{ 
public:


~ScriptBank();
    static Dictionary<CreateObjectFn>& getInstance()
    {   
       static Dictionary<CreateObjectFn>& registry = m_registry;
       return registry;
    }

private:
    static Dictionary<CreateObjectFn> m_registry;
    ScriptBank();
};

我有各种类型的脚本,所以在这个字典中我想把派生脚本的某个函数放在里面。

现在从模板类:

template <class T>
class Register
{
public:
    Register()
    {
        ScriptBank::getInstance().insert("Some string", T::create);
    }
    ~Register()
    {
    }
};

在派生的脚本中,我有类似的东西:

    static Script* create(TiXmlElement* node);
static Register<DoorChStateScript> m_Registry;

我的目的是在编译时插入函数指针,但编译器似乎无法识别正确的类型。在 Register 类中,我收到此错误:cannot convert parameter 2 from 'Script *(TiXmlElement *)' to 'CreateObjectFn *'

有任何想法吗?

4

0 回答 0