我是一个非常新手 (C++) 程序员,并且刚刚发现了 CRTP 用于记录属于特定类的对象的计数。
我是这样实现的:
template <typename T>
struct Counter
{
Counter();
virtual ~Counter();
static int count;
};
template <typename T> Counter<T>::Counter()
{
++count;
}
template <typename T> Counter<T>::~Counter()
{
--count;
}
template <typename T> int Counter<T>::count(0);
这似乎有效。但是,它似乎不喜欢在一个单独的头文件中继承它,我在其中声明了这一点:
class Infector : public Counter<Infector>
{
public:
Infector();
virtual ~Infector();
virtual void infect(Infectee target);
virtual void replicate() = 0;
virtual void transmit() = 0;
protected:
private:
};
没有继承,一切都编译得很好,所以我很确定它看不到模板的声明和定义。有人对我可能出错的地方以及我能做些什么有任何建议吗?我应该在我的 Infector 定义之前使用 extern 来让编译器知道 Counter 模板或类似的东西吗?
干杯,
凯尔