Utilizar CRTP (Modelo Curiosamente Recorrente de Modelo) com parâmetros de tipo adicionais

Tento usar o CRTP (Curiously Recurring Template Pattern) e forneço parâmetros de tipo adicionais:

template <typename Subclass, typename Int, typename Float>
class Base {
    Int *i;
    Float *f;
};
...

class A : public Base<A, double, int> {
};

Este é provavelmente um erro, a superclasse mais apropriada seriaBase<A, double, int> - embora esse argumento de incompatibilidade de ordem não seja tão óbvio. Esse bug seria mais fácil de ver se eu poderia usar o nome do significado dos parâmetros em um 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;
};

No entanto, isso não compila no gcc 4.4, os erros relatados são dados como comentários acima - acho que o motivo é que, antes de criar A, ele precisa instanciar o modelo Base, mas isso, por sua vez, precisa saber A.

Existe uma boa maneira de passar parâmetros de modelo "nomeados" enquanto estiver usando o CRT

questionAnswers(3)

yourAnswerToTheQuestion