Abstract base class puzzle

Posted by 0x80 on Stack Overflow See other posts from Stack Overflow or by 0x80
Published on 2010-03-16T10:01:01Z Indexed on 2010/03/16 21:21 UTC
Read the original article Hit count: 278

In my class design I ran into the following problem:

class MyData
{   
   int foo;
};

class AbstraktA
{
public:
    virtual void A() = 0;
};

class AbstraktB : public AbstraktA
{
public:
    virtual void B() = 0;
};

template<class T>
class ImplA : public AbstraktA
{
public:
    void A(){ cout << "ImplA A()";  }       
};

class ImplB : public ImplA<MyData>, public AbstraktB
{
public:
     void B(){ cout << "ImplB B()"; }   
};

void TestAbstrakt()
{
    AbstraktB *b = (AbstraktB *) new ImplB;
    b->A();
    b->B();
};

The problem with the code above is that the compiler will complain that AbstraktA::A() is not defined.

Interface A is shared by multiple objects. But the implementation of A is dependent on the template argument. Interface B is the seen by the outside world, and needs to be abstrakt.

The reason I would like this is that it would allow me to define object C like this: Define the interface C inheriting from abstrakt A. Define the implementation of C using a different datatype for template A.

I hope I'm clear. Is there any way to do this, or do I need to rethink my design?

© Stack Overflow or respective owner

Related posts about c++

Related posts about abstract-class