我有这个 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 *'
有任何想法吗?