Per quanto riguarda CRP se voglio implementare una leggera variazione di esso (con il parametro template) ottengo un errore di compilazione:template Curiosamente ricorrente - variazione
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()
{
}
};
io non sono esattamente sicuro uno avrebbe scelto questo modulo (che non compila per me) invece di utilizzare questo, però (questo funziona)
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()
{
}
};
Abbastanza interessante deve essere esplicito riguardo il typname T nella dichiarazione due volte ... Non capisco veramente perché – Ghita
Appena realizzato che derivato deve trasmettere anche il suo parametro T. – Ghita