我已經成功地我的困惑凝結下面的代碼:通過模板標籤困惑
template<typename T>
class BTI {
public:
char func(char);
};
template<int i>
class Tag {};
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
這是爲了:
- 聲明模板類
BTI
, - 一個聲明模板化標籤類
Tag
和 - 提供
func
的模板專用實現,當時BTI
的模板參數是Tag<i>
。
當我運行此通過g++ -fsyntax-only
(使用G ++ 4.1.2),我得到:
test.cc:11: error: invalid use of undefined type ‘class BTI<Tag<i> >’
test.cc:2: error: declaration of ‘class BTI<Tag<i> >’
test.cc:11: error: template definition of non-template ‘unsigned char BTI<Tag<i> >::func(char)’
我甚至不知道該怎麼在這一點嘗試。有任何想法嗎?
但BTI在沒有模板化的情況下,也就是說它從不使用T.也是特殊化返回一個無符號字符,而不是char? – vulkanino 2012-02-28 16:50:33
func不是模板函數,所以你不能專門化它。我認爲你可能需要專門研究整個班級,或者讓func成爲一個獨立的助手(模板)功能。我會玩... – BoBTFish 2012-02-28 16:53:31
添加到@BoBTFish所說的,即使'func'是一個函數模板,你可以*不專門化它,因爲你嘗試一個*部分*專業化,C++只支持完整的專業化功能模板(如同模板一樣)。 – 2012-02-28 17:14:07