Итак, предположим, у меня есть класс дерева, как это в C ++
class Node{
void addChild(Node*);
/*obvious stuff*/
protected:
Node* parent;
vector<Node*> children
}
class specialNode : public Node{
void addChild(specialNode*);
/*obvious stuff*/
/*special stuff*/
}
Теперь, когда я получаю доступ к детям в specialTree, я, очевидно, получаю Node *, а не specialNode *.
Но этот specialNode * имеет переменные-члены и функции, которых нет у Node.
Я могу заставить specialNode брать только specialNode в качестве дочерних, и в противном случае прерывать во время компиляции,
но я по-прежнему получаю Node * при доступе к children / parent, и мне приходится приводить его всякий раз, когда я хочу использовать специальные функции, даже в функциях specialNode.
Есть ли какой-нибудь умный или просто лучший способ сделать это?
Кроме буквального литья каждый раз?