Я пытаюсь использовать шаблон любопытно повторяющегося шаблона (CRTP) и предоставляю дополнительные параметры типа:
template <typename Subclass, typename Int, typename Float>
class Base {
Int *i;
Float *f;
};
...
class A : public Base<A, double, int> {
};
Вероятно, это ошибка, более подходящим суперклассом будет Base
- хотя это несоответствие порядка аргументов не так очевидно. Эту ошибку было бы легче увидеть, если бы я мог использовать name значение параметров в 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?