【发布时间】:2017-12-05 20:28:36
【问题描述】:
首先,我试图创建一个与 Unity 架构相似的游戏引擎。我有一个 Object 类,一个继承自 Object 的 GameObject 类。在 GameObject 类中,我正在尝试创建一个模板类,它可以让您将任何组件添加到游戏对象上,尽管我得到了一个我似乎无法解决的动态指针转换错误。
这是 GameObject 类:
class GameObject : public Object
{
public:
template<class T>
std::shared_ptr<T> addChildComponent()
{
std::shared_ptr<T> temp_component(new T());
temp_component->gameObject = std::dynamic_pointer_cast<GameObject>(shared_from_this());
m_components.push_back(temp_component);
return temp_component;
}
template<class T>
std::shared_ptr<T> getComponent()
{
for (int i = 0; i < m_components.size(); i++)
{
std::shared_ptr<T> t;
t = m_components.at(i);
if (t.get() != NULL)
{
return t;
}
}
return std::shared_ptr<T>();
}
此外,这是它继承自的对象类:
class Object : public std::enable_shared_from_this<Object>
{
friend class GameObject;
public:
Object();
~Object();
void makeName(std::string _name);
std::string getName();
private:
std::string name;
};
【问题讨论】:
标签: c++ oop game-engine dynamic-cast template-classes