0
我想製作一個模板對象的列表,這些對象在基類的不同子類之後模板化。我知道列表不能是異構的,因此在這些基類的列表後鍵入我的模板列表。實例化基類模板列表中的子類對象
查看下面的基本代碼。當我嘗試從模板中實例化實現時,問題就出現了,因爲它仍然假設我使用抽象基類,儘管我已經在模板參數中傳遞了它的子類。
這一切都在標題中完成。
// Base Class
class MyBase {
public:
MyBase(int a) {}
virtual void Print() = 0;
};
// Subclass ONE
class MySub_One :
public MyBase
{
public:
MySub_One(int a)
: MyBase(a) {}
virtual void Print() override { printf("Sub One\n"); }
};
// Subclass TWO
class MySub_Two :
public MyBase
{
public:
MySub_Two(int a)
: MyBase(a) {}
virtual void Print() override { printf("Sub Two\n"); }
};
// Template Class
template <class T>
class MyTemplate
{
int numPrint;
void CreateAndPrint()
{
T* obj = new T(0); // Compiler says, "error C2259: 'MyBase' Cannot instantiate abstract class."
obj = dynamic_cast<MyBase>(obj);
obj->Print();
}
};
當我一個子類對象後添加到一個基類列表中,還有一個問題:
list<MyTemplate<MyBase>*> testList = list<MyTemplate<MyBase>*>();
testList.push_back(new MyTemplate<MySub_One>()); // This is a problem too
是什麼原因導致這兩個錯誤?有什麼辦法可以做到這一點?
1.這實際上是一個錯字 - 原來是指針的列表。將指針添加到上面的代碼沒有任何區別。但是... 2.我會試試看 - 看起來很有前途。 – JordanBell