C++ C++;从模板类派生
我正在尝试创建以下内容的子类:C++ C++;从模板类派生,c++,inheritance,C++,Inheritance,我正在尝试创建以下内容的子类: template < class THandler, class ThreadModel = CComSingleThreadModel, class TagReplacerType = CHtmlTagReplacer< THandler > > class CRequestHandlerT : public TagReplacerType, public CComObjectRootEx< T
template <
class THandler,
class ThreadModel = CComSingleThreadModel,
class TagReplacerType = CHtmlTagReplacer< THandler >
>
class CRequestHandlerT :
public TagReplacerType,
public CComObjectRootEx< ThreadModel >,
public IRequestHandlerImpl< THandler >
模板<
坦德勒阶级,
类别ThreadModel=CComSingleThreadModel,
类TagReplacerType=CHtmlTagReplacer
>
等级CRequestHandlerT:
公共标记替换类型,
公共CComObjectRootEx,
公共IRequestHandlerImpl
如果按以下方式使用,则上述类别的工作效果最佳:
class Cmy_form : public CRequestHandlerT<Cmy_form>
Cmy\U类表格:公共凭证
但我正在尝试创建一个子类(通过添加额外的成员函数来扩展CRequestHandlerT功能):
class-Cmybase\u格式:public-CRequestHandlerT{…};
类Cmy_表单:公共Cmybase_表单{…};//生成但运行时错误
根据我的理解,我已经写了一些代码,它工作得很好。如果我误解了你的要求,请告诉我
#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;
}
#包括
使用名称空间std;
模板
类数据库{
公众:
tbase(){}
~tbase(){}
虚拟bool my_print(T值)
{
如果没有更多关于正在发生的错误的代码或信息,调试可能会非常困难。Ben,但是Cmybase_表单的语法如何?是否看起来我的派生不正确?我的目标是在Cmybase_表单中添加一个成员函数,并从中派生,而不是从CRequestHandlerT。你知道为什么需要CRTP吗?它很简单像CRequestHandlerT
这样的ok将调用T的函数。因此,这导致了上面显示的两种形式的Cmy\u形式
之间的巨大差异。如果CRequestHandlerT
所需的T
的所有函数都是虚拟的,我想你应该很好。你知道什么时候会发生运行时错误吗?也许是这样正在销毁Cmy_表单
,因为它没有虚拟析构函数?Pradham,你能给我一个例子,说明你如何将CRequestHandlerT子类化吗?我很困惑。@CarolineBeltran你想添加到Cmybase_表单
的这个成员函数依赖于CRequestHandlerT
?换句话说,你能做吗>Cmybase类表格
。和Cmy类表格:公共Cmybase类表格,CRequestHandlerT
?
#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;
}