有没有办法将私有变量添加到代码中的STL类?例如,使它成为" std :: list"的任何实例。将附加一个额外的变量。或者你只需要从头开始制作自己的清单?
答案 0 :(得分:3)
在少数情况下,是的。例如,std :: istream和std :: ostream有一个特殊的,很少使用的名为xalloc()
的方法,它允许您向这些类的所有实例添加一个或多个long
或void*
成员
但那并不典型。对于像std :: list这样的容器类,没有像这样的成员钩子来添加“slots”来包含自定义数据。
但是,容器类确实有一个分配器的可选模板参数。每个容器都有一个分配器,默认情况下是无状态的,并使用new
和delete
来分配元素。在C ++ 11及更高版本中,这些分配器可以是“有状态的”,这意味着您可以使用new
和delete
创建自己的分配器,但也可以存储任意额外数据。
一旦你用你需要的状态编写了你的分配器,就可以检索它,例如使用get_allocator()
列表。