Về CRP nếu tôi muốn thực hiện sự thay đổi nhỏ của nó (sử dụng mẫu tham số mẫu) tôi nhận được một lỗi biên dịch:Tò mò lặp đi lặp lại mẫu - biến thể
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()
{
}
};
Tôi không phải là chắc chắn chính xác người ta sẽ chọn hình thức này (điều đó không có biên dịch cho tôi) thay vì sử dụng mặc dù điều này (chỉ hoạt động này)
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()
{
}
};
Khá thú vị một trong những đã được rõ ràng về typename T trong tuyên bố hai lần ... Không thực sự hiểu tại sao – Ghita
Chỉ cần nhận ra rằng có nguồn gốc đã truyền nó T tham số cũng có. – Ghita