C++中的模板不能替代OO。模板提供编译时多态性;OO运行时。你需要后者,所以你需要一个公共基类。
如果标题没有准确描述我要做的事情,我深表歉意。
我正在研究一个基于双链表原理的节点/场景树系统。我的基类Node
有成员函数getParent
和getChild
,它们可以返回它上面和下面的相应节点。我还实现了子类GameObject
和Scene
,它们是每个子类都有额外成员的节点。
我试图实现的想法是,我可以实例化一个Scene
对象,它是Node<Scene>
,然后将其子对象或父对象设置为其他Node
类、Scene
子类或GameObject
子类,并可以访问它们各自的所有成员和函数。这是我目前的实现
template<class classType>
class Node
{
private:
std::string name;
//Hypothetical thing I want to do. Parent or child can be a Node of any type
template<class T>
Node<T>* parent;
template<class T>
Node<T>* child;
public:
Node() {
// Constructor things...
};
// Return the correct class type for the child or parent
Node* getChildNode() { return child; };
Node* getParentNode() { return parent; };
// Setter functions can accept a node of any type
template<class T>
void setChildNode(Node<T> *new_child){
child = new_child;
};
template<class T>
void setParentNode(Node<T> *new_parent){
parent = new_parent;
};
}
class Scene : public Node<Scene>
{
public:
Scene();
void foo();
};
class GameObject : public Node<GameObject>
{
public:
GameObject();
void bar();
};
这些类有望像这样使用:
Scene* root = new Scene();
GameObject* platform = new GameObject();
platform->setParentNode(root); //"error: cannot convert ‘Node<Scene>*’ to ‘Node<GameObject>*’ in assignment"
platform->getParentNode().foo(); //Call function specific to a Scene class
有没有一种方法可以用我目前拥有的东西实现这一功能?