[英]C++ How do I get the data out of a templated child of a virtual class?
所以我有這個類,我需要以某種方式獲取存儲在_data變量中的數據。
template<typename T>
class gNode : public BaseSuperclass {
private:
int _id;
T _data;
public:
gNode(int id, T data) {
_id = id;
_data = data;
}
const int getId() { return _id; }
T getData(){
return _data;
}
};
該類繼承自該虛擬類,因為我需要將gNode類存儲在容器中,並且由於該容器而無法正常工作。
class BaseSuperclass {
// ...
public:
virtual const int getId() = 0;
};
這個容器將是我訪問gNode對象的唯一方法。 但是現在我迷失了如何獲取_data變量中的數據,因為虛擬類不能具有返回類型未知的函數。
多數民眾贊成在容器:
vector<BaseSuperclass *> nodes;
下面的代碼給我一個細分錯誤。
gNode<T>* node1 = dynamic_cast<gNode<T>*>(nodes[0]);
node1->getData();
我感謝我所能提供的一切幫助。 謝謝。
編輯:我發現如果gNode._data具有不同類型,則會發生此分段錯誤。 因此,如果我只傳遞int或僅傳遞字符串,那么一切都很好。 但是,如果第一個gNode是一個字符串,第二個gint是一個int,它將出錯。 對我來說還是沒有道理
edit2:要求可編譯(我認為)示例:#include #include
using namespace std;
class BaseSuperclass {
public:
virtual const int getId() = 0;
};
template<typename T>
class gNode : public BaseSuperclass {
private:
int _id;
T _data;
public:
//Konstruktor
gNode(int id, T data) {
_id = id;
_data = data;
}
const int getId() { return _id; }
T getData(){
return _data;
}
};
class Graph {
public:
vector<BaseSuperclass *> nodes;
template<typename T>
void addNode(int nodeId, T data) {
nodes.push_back(new gNode<T>(nodeId, data));
gNode<T>* node1 = dynamic_cast<gNode<T>*>(nodes[0]);
T test = node1->getData();
cout<<test<<endl;
};
void Main(){
Graph graph1;
graph1.addNode(1, "vvv");
graph1.addNode(2, 12);
return 0;
}
在addNode
您push_back
的類型為T
,然后嘗試訪問第一個類型為T
元素。
您使用兩種不同的類型兩次調用addNode
。
因此,第二次調用addNode
, T
與存儲在第一個元素中的類型不同。 因此, dynamic_cast<gNode<T>*>(nodes[0]);
將返回一個nullptr
。
您需要確保在讀取時使用與存儲時相同的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.