En cuanto CRP si quiero aplicar una ligera variación de la misma (con el parámetro de plantilla plantilla) me sale un error de compilación:Curiosamente recurrente plantilla - variación
template <template <typename T> class Derived>
class Base
{
public:
void CallDerived()
{
Derived* pT = static_cast<Derived*> (this);
pT->Action(); // instantiation invocation error here
}
};
template<typename T>
class Derived: public Base<Derived>
{
public:
void Action()
{
}
};
No estoy exactamente seguro de que uno elegiría este formulario (que no se compila para mí) en lugar de utilizar esto, sin embargo (esto funciona)
template <typename Derived>
class Base
{
public:
void CallDerived()
{
Derived* pT = static_cast<Derived*> (this);
pT->Action();
}
};
template<typename T>
class Derived: public Base<Derived<T>>
{
public:
void Action()
{
}
};
Bastante interesante tiene que ser explícito sobre typename T en declaración dos veces ... No entiendo por qué – Ghita
Acaba de darse cuenta de que derivada también tiene que transmitir su parámetro T. – Ghita