【问题标题】:Adding private variable to c++ stl class将私有变量添加到c ++ stl类
【发布时间】:2016-11-27 00:05:01
【问题描述】:

有没有办法在代码中将私有变量添加到 STL 类?例如,使“std::list”的任何实例都附加一个附加变量。还是您只需要从头开始制作自己的清单?

【问题讨论】:

  • 为什么不创建一个从std::list 派生的类?从头开始自己制作通常是一个非常糟糕的主意。
  • @tadman 别忘了privately。
  • 听起来像XY Problem - 你真正想达到什么目的?
  • @LogicStuff 不妨聚合一下...
  • 不推荐从 STL 容器继承。

标签: c++ stl std private


【解决方案1】:

在少数情况下,是的。例如,std::istream 和 std::ostream 有一个特殊的、很少使用的方法,称为 xalloc(),它允许您向这些类的所有实例添加一个或多个 longvoid* 成员。

但这并不典型。对于像 std::list 这样的容器类,没有像这样的成员钩子来添加“槽”来包含自定义数据。

但是,容器类确实有一个分配器的可选模板参数。每个容器都有一个分配器,默认情况下是无状态的,使用newdelete 分配元素。在 C++11 及更高版本中,这些分配器可以是“有状态的”,这意味着您可以使用 newdelete 创建自己的分配器,但也可以存储任意额外数据。

一旦你用你需要的状态编写了你的​​分配器,你就可以检索它,例如从使用get_allocator()的列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多