2016-11-27 98 views
1

有沒有辦法在你的代碼中將私有變量添加到STL類中?例如,使得「std :: list」的任何實例都會附加一個附加變量。或者你只需​​要從頭開始創建自己的列表?向C++添加私有變量stl class

+2

爲什麼不從'std :: list'派生類?從頭開始你自己通常是一個超級壞主意。 – tadman

+1

@tadman不要忘記'私人'。 – LogicStuff

+8

聽起來像一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 你真的*試圖達到什麼? –

回答

3

在少數情況下,是的。例如,std :: istream和std :: ostream有一個特殊的很少使用的方法,稱爲xalloc(),它允許您將一個或多個longvoid*成員添加到這些類的所有實例。

但這並不典型。對於像std :: list這樣的容器類,沒有像這樣的成員掛鉤來添加「插槽」來包含自定義數據。

但是,容器類有一個可選的分配器模板參數。每個容器都有一個分配器,默認情況下它是無狀態的,並使用newdelete來分配元素。在C++ 11和更高版本中,這些分配器可以是「有狀態的」,這意味着您可以使用newdelete來創建自己的分配器,但也可以存儲任意額外的數據。一旦你用你需要的狀態編寫你的分配器,你可以檢索它,例如:從列表中使用get_allocator()

+0

使用分配器是一個聰明的技巧。謝謝。 – YSC