Utilice un patrón de plantilla curiosamente recurrente (CRTP) con parámetros de tipo adicionales

Intento utilizar el patrón de plantilla curiosamente recurrente (CRTP) y proporcionar parámetros de tipo adicionales:

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

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

Esto es probablemente un error, la superclase más apropiada seríaBase<A, double, int> - aunque este desajuste de orden de argumento no es tan obvio de detectar. Este error sería más fácil de ver si pudiera usar nombrar el significado de los parámetros en un 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;
};

Sin embargo, esto no se compila en gcc 4.4, los errores informados se dan como comentarios arriba. Creo que la razón es que antes de crear A, necesita crear una instancia de la plantilla Base, pero esto a su vez necesitaría saber A.

Existe una buena forma de pasar parámetros de plantilla "con nombre" mientras se usa CRTP?

Respuestas a la pregunta(3)

Su respuesta a la pregunta