这是我第一次在课堂上使用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文件中实现”)给出了对该问题的全面说明。

08-25 14:29