#include <stdio.h>
template<typename T, typename T2, template <typename T> class TemplateClass>
class TemplateTemplateClass {
public:
TemplateTemplateClass(const TemplateClass& tempClass)
: _internalClass(tempClass) {
}
void doTest() {
_internalClass.doTest();
}
private:
TemplateClass _internalClass;
};
上面的代碼編譯會給以下錯誤消息時:錯誤是什麼意思?關於C++模板參數
$ g++ TemplateTemplateClass.cpp
TemplateTemplateClass.cpp:7:33: error: invalid use of template-name 'TemplateClass' without an argument list
TemplateTemplateClass.cpp:7:48: error: ISO C++ forbids declaration of 'tempClass' with no type [-fpermissive]
TemplateTemplateClass.cpp:15:5: error: invalid use of template-name 'TemplateClass' without an argument list
TemplateTemplateClass.cpp: In constructor 'TemplateTemplateClass<T, T2, TemplateClass>::TemplateTemplateClass(const int&)':
TemplateTemplateClass.cpp:8:11: error: class 'TemplateTemplateClass<T, T2, TemplateClass>' does not have any field named '_internalClass'
TemplateTemplateClass.cpp: In member function 'void TemplateTemplateClass<T, T2, TemplateClass>::doTest()':
TemplateTemplateClass.cpp:12:9: error: '_internalClass' was not declared in this scope
如果我改變它像下面那麼就可以編譯成功。
class TemplateTemplateClass {
public:
TemplateTemplateClass(const TemplateClass<T>& tempClass)
: _internalClass(tempClass) {
}
void doTest() {
_internalClass.doTest();
}
private:
TemplateClass<T> _internalClass;
};
因此,考慮上面的錯誤消息,我的問題是,在TemplateClass<T>
,這是什麼意思<T>
?爲什麼它不能被刪除?
你想做[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)嗎? – Rapptz