C++ 从模板类派生

标签 c++ inheritance

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

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

如果不满足您的要求,请退回。我们会解决这个问题。

关于C++ 从模板类派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501648/

相关文章:

c++ - 撤消打印到命令行的换行符 (\n)

Javascript 继承 - 重叠基类变量

python - 如何使 python 对象可通过 numpy.array() 调用

c++ - 覆盖虚拟成员函数时,为什么覆盖函数总是变为虚拟?

java - parent 可以调用子类方法吗?

c++ - #elseif 与 #elif(C/C++ 预处理器)

java - 如何以编程方式捕获 Oracle Virtualbox 计算机屏幕?

c++ - 使所有派生模板类成为 C++ 中其他类的 friend

c++ - 在 C++ 中避免全局变量的好风格

c++ - 视觉 C++ : Compare Dates