我能以某种方式弄清楚基类构造函数中对象的类型吗?

时间:2013-03-25 16:19:59

标签: c++ inheritance casting dynamic-cast

GroupElement的子类。任何组都可以包含元素(自然可以是组)。每个元素都使用其包含的组进行自我注册,并将其传递给构造函数。但是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 个答案:

没有答案