【发布时间】:2012-02-28 16:46:49
【问题描述】:
我设法将我的困惑浓缩为以下代码:
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,并且 - 当
BTI的模板参数是Tag<i>时,提供func的模板专用实现。
当我通过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。专业化返回一个无符号字符,而不是一个字符??
-
func 不是模板函数,所以你不能专门化它。我认为您可能必须专门研究整个班级,或者可能使 func 成为独立的帮助器(模板)功能。我要演戏……
-
添加到 @BoBTFish 所说的内容中,即使
func是一个函数模板,您也可以仍然不专门化它,因为您尝试了 partial专业化和 C++ 仅支持函数模板的完全专业化(与类模板相反)。
标签: c++ templates compiler-errors