Альтернативой предложению Мирана будет использование dynamic_cast<>
для приведения тех известных вам узлов типа SpecialNodeA
из TreeBaseNode
в SpecialNodeA
, а затем просто вызов соответствующей функции-члена для получения атрибута.вы после.
В этом конкретном сценарии вы даже можете покончить с членом NodeType
в базовом классе, так как dynamic_cast<SpecialNodeA>
на узле, который не относится к этому типу, просто вернет нольуказатель.Мне не очень нравятся иерархии, в которых базовый класс должен знать свои производные типы, так как это устраняет некоторые преимущества иерархии классов и предполагает, что дизайн не так чист, как должен быть.