calling a function from a set of overloads depending on the dynamic type of an object

Posted by Jasper on Stack Overflow See other posts from Stack Overflow or by Jasper
Published on 2010-05-16T20:53:41Z Indexed on 2010/05/16 21:20 UTC
Read the original article Hit count: 175

Filed under:
|

I feel like the answer to this question is really simple, but I really am having trouble finding it. So here goes:

Suppose you have the following classes:

class Base;
class Child : public Base;

class Displayer
{
public:
    Displayer(Base* element);
    Displayer(Child* element);
}

Additionally, I have a Base* object which might point to either an instance of the class Base or an instance of the class Child.

Now I want to create a Displayer based on the element pointed to by object, however, I want to pick the right version of the constructor. As I currently have it, this would accomplish just that (I am being a bit fuzzy with my C++ here, but I think this the clearest way)

object->createDisplayer();

virtual void Base::createDisplayer()
{
     new Displayer(this);
}

virtual void Child::createDisplayer()
{
     new Displayer(this);
}

This works, however, there is a problem with this:

Base and Child are part of the application system, while Displayer is part of the GUI system. I want to build the GUI system independently of the Application system, so that it is easy to replace the GUI. This means that Base and Child should not know about Displayer. However, I do not know how I can achieve this without letting the Application classes know about the GUI.

Am I missing something very obvious or am I trying something that is not possible?

© Stack Overflow or respective owner

Related posts about c++

Related posts about inheritance