Можно ли как-то выяснить тип объекта в конструкторе базового класса?

Group это подкласс Element, Любая группа может содержать элементы (которые могут быть группами, естественно). Каждый элемент регистрируется в своей содержащей группе, которая передается в конструктор. Но dynamic_castкажется, не работает, пока конструктор не закончил.

Могу ли я еще автоматически звонить add_element от конструктора, но все же убедитесь, что объект достаточно готов для dynamic_cast?

#include <iostream>
#include <vector>

class Group;

class Element {
public:
Element(Group* group);
virtual ~Element();

private:
Group* group;
};

class Group : public Element {
public:
Group(Group* group);
void add_element(Element* element);
void remove_element(Element* element);

private:
std::vector<Element*> elements;
};

Element::Element(Group* group) : group(group)
{
if (group)
group->add_element(this);
}

Element::~Element()
{
if (group)
group->remove_element(this);
}

Group::Group(Group* group) : Element(group)
{
}

void Group::add_element(Element* element)
{
if (dynamic_cast<Group*>(element))
std::cout << "Adding a group" << std::endl;
else
std::cout << "Adding an element" << std::endl;
elements.push_back(element);
}

void Group::remove_element(Element* element)
{
// No need to implement this actually...
}

int main()
{
Group* parent = new Group(0);
Group* child = new Group(parent);
}

Замечания: Оригинальный вопрос здесь был другим, но оказалось, что dynamic_cast не проблема; dynamic_cast в конструкторе есть.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]