2010-07-15 34 views
0

我見過使用模板定義堆棧容納數據類型的堆棧類。如果我想要一個容納不同類型數據的堆棧呢?我有一點想法,並接近使用void指針(但無效指針不能解除引用,所以它不是正確的解決方案)所以...有可能有這樣一個類?是否可以創建採用任何類型變量的堆棧類?不僅有1種類型

+0

這聽起來像是你正在嘗試做一些你不應該做的事情......上下文是什麼?爲什麼你不能使用公共基類,虛擬和dynamic_cast <> - 或者,作爲最後的手段,對所有內容使用聯合或不安全的(void *)投射? (我假設你可以完全控制堆棧中存儲的內容<>)。 – integer 2010-07-15 16:02:45

回答

0

void指針不能被解除引用,當然,但您仍然可以將void指針轉換爲您需要的實際指針類型,然後對其進行解引用。

void *ptr = malloc(10); 

    *ptr = 10; // won't work 

    *((int *)ptr) = 10; // will work 
0

你應該看看C++模板。這樣你可以設計類或函數來處理任何數據類型。

1

有多種選擇,從最安全到最艱苦這裏列出來管理

  • 公共基類
  • boost::variant(假設你事先知道所有類型)
  • boost::any(非常難行動起來,因爲任何東西都可以在那裏......)
  • void*(很困難再次出現內存管理問題)

拿起你想要的。

相關問題