Я пытаюсь использовать шаблон любопытного повторения шаблона (CRTP) и предоставляю дополнительные параметры типа:
template <typename Subclass, typename Int, typename Float>
class Base {
Int *i;
Float *f;
};
...
class A : public Base<A, double, int> {
};
Это, вероятно, ошибка, более подходящим суперклассом будет Base<A, double, int>
- хотя этот аргументнесоответствие порядка не так очевидно, чтобы определить.Эту ошибку было бы легче увидеть, если бы я мог использовать имя и значение параметров в typedef:
template <typename Subclass>
class Base {
typename Subclass::Int_t *i; // error: invalid use of incomplete type ‘class A’
typename Subclass::Float_t *f;
};
class A : public Base<A> {
typedef double Int_t; // error: forward declaration of ‘class A’
typedef int Double_t;
};
Однако, это не компилируется в gcc 4.4, об ошибках, о которых сообщают, приводятся в виде комментариев выше -Я думаю, причина в том, что перед созданием A ему нужно создать экземпляр базового шаблона, но это, в свою очередь, должно знать A.
Есть ли хороший способ передачи "именованных" параметров шаблона при использовании CRTP