Curiously recurring template - variation
c++, crtp, templates
Solution
This should compile as well. We just need to get the other template parameter specified explicitly
template <typename T, template <typename T> class Derived>
class Base
{
public:
void CallDerived()
{
Derived<T>* pT = static_cast<Derived<T>*> (this);
pT->Action(); // instantiation invocation error here
}
};
template<typename T>
class Derived: public Base<T,Derived>
{
public:
void Action()
{
}
};
Problem
Regarding CRP if I want to implement a slight variation of it (using template template parameter) I get a compile error: ``` 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() { } }; ``` I am not exactly sure one would chose this form (that does not compile for me) instead of using this though (this works) ``` 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() { } }; ```