【问题标题】:Why some libraries must implement basic data structure? [closed]为什么有些库必须实现基本的数据结构? [关闭]
【发布时间】:2010-03-10 04:39:50
【问题描述】:

一些开源库倾向于重新实现基本结构,如字符串、列表、堆栈、队列...... 他们为什么不使用 stl 库? stl还不够好吗?

【问题讨论】:

    标签: c++ data-structures open-source


    【解决方案1】:

    C++ 作为一种语言在 STL 标准化之前已经存在了很多年,在 STL 在所有编译器中一致实现之前又存在了几年。在那段时间最初编写的库可能不想依赖 STL 来提高可移植性。

    与可移植性相关的另一个原因是嵌入式使用。例如,Qt 重新实现了大部分 STL,因为 Qt 应用程序有时针对可能没有可用的 STL 实现的嵌入式平台(例如诺基亚智能手机)。

    【讨论】:

    • 是的。不知道自己历史的人,总是会被现在所迷惑。总是。
    • STL 不是可移植的吗?难道你不能直接将 STL 头文件下载到嵌入式系统并像安装 Qt 源代码一样容易地编译吗?
    • 一个很大的问题.. 一些 STL 功能,如 IO,分配器需要移植或重定向,而且 QT 不能依赖于 STL 的编译器或外部库。拥有自己的 STL 重写还有助于优化和轻松移动代码。注意:STL 会随着 C++ 标准的变化而变化。
    【解决方案2】:

    在某些情况下,在标头中公开 STL 类型可能会导致令人讨厌的、讨厌的链接时间。在大型项目中,这可能是将它们“隐藏”在具有专有外观的 API 后面的充分理由。

    【讨论】:

    • 对于 boost 来说更糟糕...哎呀,我只需要在我们的构建系统中添加一个 hack 以在编译 ctags 信息时跳过 boost 标头,因为它完全用完了记忆。
    • @Tom +1 - 提升是沉重而难以忍受的。我有时更喜欢 STLPort:stlport.org
    【解决方案3】:

    STL 实现在每个平台上都不同,因此在库中公开 STL 会有风险,例如,如果您在库中公开 std::map,由于您无法从库中导出 std::map,您的库将被强制执行使用您的库用户(加载您的库的用户)的 std::map 实现,这将导致一些不兼容,例如不同版本的 STL 实现、不同的 STL 分配器类以及一些特定于平台的问题。

    【讨论】:

      【解决方案4】:
      1. 其中一个原因可能是 STL 容器不打算用作基类 - STL design issues Wikipedia

      2. To STL or NOT STL that is the question - SO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多