My End的目标是为函数创建字符串映射,允许将任何组件添加到具有给定字符串的对象中。 我通过告诉每个组件它属于哪个对象并且可以生效来分配组件。
模板声明:
template<typename T> BaseComponent * createInstance(Object* object) {return new T;}
ObjectManager构造函数:
ObjectManager::ObjectManager()
{
componentMap["ReadComponent"] = &createInstance<ReadComponent>;
componentMap["WriteComponent"] = &createInstance<WriteComponent>;
}
组件添加:
bool ObjectManager::Addcomponents(string ComponentType, int objectNumber)
{
if (ComponentMap.find(componentType) != ComponentMap.end())
{
Objects.at(objectNumber)->Components.push_back(ComponentMap["ReadComponent"](&Objects.at(objectNumber)->object));
return true;
}
else
{
return false;
}
}
虽然对于大多数文件都可以正常工作,但它在第3行(我的模板声明)上标记为任何组件类型都有“没有适当的默认构造函数”。
以下是我的组件构造函数:
public:
Readcomponent(Object* owner) : Basecomponent(owner)
{
this->Type = "Read";
};
public:
Writecomponent(Object* owner) : Basecomponent(owner)
{
this->Type = "Write";
this->WriteText = "Writecomponent Online";
};
我知道我可能做了一些愚蠢和基本的事情,但不能为我的生活看到我出错的地方。