从模板类派生

C++ Derive from template class

本文关键字:派生      更新时间:2023-10-16

我正在尝试创建以下子类:

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

如果按照以下方式使用,上面的类可以完美地工作:

class Cmy_form : public CRequestHandlerT<Cmy_form>

但我试图创建一个子类(通过添加一个额外的成员函数来扩展CRequestHandlerT功能):

class Cmybase_form : public CRequestHandlerT<Cmybase_form> {...};
class Cmy_form : public Cmybase_form {...};    // builds but runtime error
  1. 我子类化Cmybase_form正确吗?
  2. 我是否使用子类Cmy_form正确?

我根据我的理解写了一些代码,它工作得很好。如果我误解了你的要求,请告诉我。

#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;
}

如果不符合您的要求,请退回。我们会解决的。