Caroline Beltran
Caroline Beltran

Reputation: 918

C++ Derive from template class

I am trying to create a subclass of the following:

template <
   class THandler,
   class ThreadModel     = CComSingleThreadModel,
   class TagReplacerType = CHtmlTagReplacer< THandler >
>
class CRequestHandlerT :
   public TagReplacerType,
   public CComObjectRootEx< ThreadModel >,
   public IRequestHandlerImpl< THandler >

The class above works perfectly if used as follows:

class Cmy_form : public CRequestHandlerT<Cmy_form>

But I am trying to create a subclass (to extend CRequestHandlerT functionality by adding an additional member function):

class Cmybase_form : public CRequestHandlerT<Cmybase_form> {...};

class Cmy_form : public Cmybase_form {...};    // builds but runtime error
  1. Am I subclassing Cmybase_form properly?
  2. Am I using the subclass Cmy_form correct?

Upvotes: 0

Views: 884

Answers (1)

Abhishek Mittal
Abhishek Mittal

Reputation: 366

I have wrote some code based on my understanding and it is working fine. Please let me know if I have misunderstood your requirement.

#include <iostream>
using namespace std;

template <class T>
class tbase {
    public:
    tbase () {}
    ~tbase () {}
    virtual bool my_print (T value) 
    {
        cout << "Value passed is: " << value << endl;
    }

    virtual void print ()
    {
        cout << "TBASE" << endl;
    }
};


template <class T>
class mbase : public tbase<T>
{
    public:
    mbase ()
        : tbase<T>()
    {}

    virtual void print ()
    {
        cout << "MBASE" << endl;
    }
};

template <class T>
class child : public mbase <T>
{
    public:
    child ()
        : mbase<T> ()
    {}

    virtual void print ()
    {
        cout << "CHILD" << endl;
    }
};

int main ()
{
    tbase <int> * b = new child<int>;
    b->print();
    b->my_print( 10 );

    return 0;
}

Please revert back if it does not satisfy your requirement. We will work out on that.

Upvotes: 1

Related Questions