這是我的示例代碼。我想從基地或中產階級獲得頂級課程。 我該怎麼做?我不想在任何地方指定頂級類名,我知道我可以寫「GetTop < TopClass>();」,但我希望,沒有這個方法。如何從基類中獲得頂級課程
當然,我的代碼顯示了一個錯誤:
「錯誤C2783: 'T *的BaseClass ::共達(無效)':不能推導出模板參數的 'T'」
class BaseClass
{
public:
BaseClass(){}
virtual ~BaseClass() {}
template < class T >
T* GetTop()
{
return static_cast<T*>(this);
};
BaseClass * GetBase()
{
return this;
}
};
class MiddleClass : public BaseClass
{
public:
MiddleClass(){}
virtual ~MiddleClass() {}
};
class TopClass : public MiddleClass
{
public:
TopClass(){}
virtual ~TopClass() {}
};
int __stdcall WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
TopClass * t = new TopClass();
MiddleClass * m = static_cast<MiddleClass*>(t);
BaseClass * b = static_cast<BaseClass*>(t);
TopClass * top = m->GetTop();
TopClass * top2 = b->GetTop();
return 0;
}
非常感謝你對你的想法:)
可以真的,真的。添加'AnotherTopClass類:public MiddleClass'時會發生什麼? – Mat
無法從返回值推導出模板參數。 – texasbruce
我不完全瞭解您的問題。是static_cast()太長,你輸入?在這種情況下,爲什麼不直接寫一個別名函數'Topclass * ctt(BaseClass * bc){return static_cast (bc);}'? –
MikeMB