Я довольно начинающий программист (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:
};
Все прекрасно компилируется без наследования, поэтому я вполне уверен, что не можетсм. объявление и определение шаблона.У кого-нибудь есть какие-либо предложения относительно того, где я могу пойти не так и что я могу с этим поделать?Должен ли я использовать extern перед моим определением Infector, чтобы сообщить компилятору о шаблоне Counter или что-то в этом роде?
Cheers,
Kyle