我正在編寫一個四叉樹類作爲圖形庫的一部分,我正面臨一個設計問題。 主要目標是允許庫的用戶使用他們自己的節點類型輕鬆擴展四叉樹。每個節點都有一個指向其四個孩子中第一個孩子的指針。我使用原型模式在分割時克隆父節點(它的真實類型對庫是未知的)四次。因此,這裏的節點類:通用四叉樹
class CNode {
public:
virtual CNode* clone();
protected:
CNode* pChilds;
}
庫的用戶現在可以定義自己的節點,然後添加一個遍歷方法:
class MyNode : public CNode {
public:
virtual CNode* clone() {
return new MyNode;
}
void myTraverse() {
if(pChilds[0] != nullptr)
static_cast<MyNode*>(pChilds[0])->traverse();
}
}
可以看到我所要做的從鑄造基類到派生類。或者,我可以製作所有四叉樹相關的類模板,但我真的不想這樣做。 我也不能使用使用提升。除了boost ::任何和RTTI或動態轉換類似的解決方案,由於四叉樹是一個性能關鍵組件,並且必須儘可能快地運行,所以速度會變慢!
在添加某種類型安全性的同時,是否有任何可以保持static_cast的速度? (四叉樹只會包含單一類型的節點)。
我標記了你的問題[C++]。如果這是不正確的,隨時恢復並添加一個不同的語言標籤。 –
並澄清你的問題:如何調用'myTraverse'成員函數?它是否被圖書館稱爲?如果是這樣,圖書館如何知道它,因爲它沒有在基類中定義? –
澄清:'myTraverse'從MyNode已知的地方被調用,所以這不是問題 – user2830627