我设法将我的困惑浓缩为以下代码:
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)’
我甚至不确定在这一点上尝试什么。有什么想法吗?
答案 0 :(得分:3)
如果你正在尝试我认为你试图尝试的东西,那么你需要完全专注BTI
,而不仅仅是一个功能;像这样:
template<typename T>
class BTI {
public:
unsigned char func(char);
};
template<int i>
class Tag {};
template<int i>
class BTI<Tag<i> > {
public:
unsigned char func(char);
};
template<typename T> unsigned char
BTI<T>::func(char c) {
return 'X';
}
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
int main() {
BTI<int> x;
BTI<Tag<0> > y;
std::cout << x.func('a') << std::endl;
std::cout << y.func('a') << std::endl;
}
这将首先打印'X'
(一般情况),然后'a'
(专业案例)。