CRPに関して、(テンプレート テンプレート パラメータを使用して) わずかなバリエーションを実装したい場合、コンパイル エラーが発生します。
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()
{
}
};
ただし、これを使用する代わりに、このフォームを選択するかどうかは正確にはわかりません (これは私のためにコンパイルされません) (これは機能します)。
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()
{
}
};