【问题标题】:Overloading C++ STL methods重载 C++ STL 方法
【发布时间】:2009-03-30 07:44:39
【问题描述】:

如何为查找、擦除和插入等方法重载 STL 实现以获取不同的参数?我试图查找 STL 方法的重载,但找不到任何帮助。

【问题讨论】:

  • 确实是指超载吗?如 std::for_each(iter1, iter2, fc)?或者您是在谈论覆盖,如 vector::find、map::erase 等...?
  • 大概你的意思是 C++ 标准库,而不是 STL。

标签: c++ stl overloading


【解决方案1】:

如果不编辑类的代码,就不能重载类的方法。

编写您自己的免费函数作为助手;他们会将相关的容器类作为第一个参数。

您可以从类继承并以这种方式添加方法,但 std 容器类并非旨在继承自。

【讨论】:

  • 解释:通过指向具有非虚拟 dtor 的基址的指针来破坏派生对象是严格的 UB。并且 std 容器类具有非虚拟 dtor,因为它们不需要 vtable。 STL 是为静态多态性设计的,因此建议的解决方案是 [..]
  • [..] 只需创建一个符合与向量相同概念的类并将其实例传递给函数模板。这是否实用值得商榷。
【解决方案2】:

不允许在 std 命名空间中添加重载。只允许为您自己的数据类型专门化函数和算法。如果您确实想要不同的查找、擦除、插入...实现一个包装器(在 std 命名空间之外)并使用它。

我也不推荐它......你想提供什么样的重载?

【讨论】:

  • 只有不同类型的自定义参数
【解决方案3】:

您不能这样做;标准禁止这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多