此代码有什么问题?

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/

10-10 23:00