此代码有什么问题?
class School {
public:
template<typename T> size_t count() const;
private:
vector<Boy*> boys;
vector<Girl*> girls;
};
template<> size_t School::count<Boy>() const {
return boys.size();
}
我的编译说
error: specialization of ‘size_t School::count() [with T = Boy]’
after instantiation
能否请你帮忙?
ps。这是我以后要使用的方式:
School s;
size_t c = s.count<Boy>();
最佳答案
在声明之前,您是否意外地在count<Boy>
中调用了School
?重现错误的一种方法是
class Boy;
class Girl;
class School {
public:
template<typename T> size_t count() const;
size_t count_boys() const { return count<Boy>(); }
// ^--- instantiation
private:
std::vector<Boy*> boys;
std::vector<Girl*> girls;
};
template<> size_t School::count<Boy>() const { return boys.size(); }
// ^--- specialization
int main () { School g; return 0; }
在所有模板成员都专用之后,需要移动
count_boys()
的定义。关于c++ - 模板方法的特化-我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2871584/