这是我第一次在课堂上使用Template。这是我的尝试。
MyCairoControl.h:
#ifndef _MYCAIROCONTROL_
#define _MYCAIROCONTROL_
template<class T>
class MyCairoControl : public IControl
{
private:
T *pPlug;
public:
MyCairoControl(T *plug, IRECT container);
~MyCairoControl();
};
#endif // !_MYCAIROCONTROL_
MyCairoControl.cpp:
#include "MyCairoControl.h"
MyCairoControl::MyCairoControl(T *plug, IRECT container) : IControl(plug, container), pPlug(plug) {
// t->somethings();
}
MyCairoControl::~MyCairoControl() {
}
但是它说“ T”是不确定的,所以我不能使用那个CTOR。在类上使用模板不是正确的方法吗?
最佳答案
由于MyCairoControl
是类模板,因此其方法定义也必须是与类的模板参数匹配的模板:
template <class T>
MyCairoControl<T>::MyCairoControl(T *plug, IRECT container){
/* ... */
}
template <class T>
MyCairoControl<T>::~MyCairoControl() {
/* ... */
}
wandbox example
这也意味着定义在编译过程中始终必须可用,而不是链接-它们必须存在于头文件中。
This article(“如何在.h文件中定义模板类并在.cpp文件中实现”)给出了对该问题的全面说明。