2010-03-10 2 views
4

Некоторые библиотеки с открытым исходным кодом имеют тенденцию к повторному внедрению базовых структур, таких как строка, список, стек, очередь ... Почему они не используют библиотеку stl? Неужели stl недостаточно хорош?Почему некоторые библиотеки должны реализовывать базовую структуру данных?

ответ

4

Выявление типов STL в заголовках может в некоторых случаях приводить к неприятным, неприятным временам ссылок. В крупных проектах это может быть достаточной причиной, чтобы «спрятать» их за проприетарным API.

+0

Это еще хуже для повышения .. черт возьми, мне просто пришлось добавить хак в нашу сборную систему на работу, чтобы пропустить заголовки форматирования при компиляции информации 'ctags', потому что у нее закончилась нехватка памяти. – Tom

+0

@ Тома +1 - удар тяжелый и невыносимый. Иногда я предпочитаю STLPort: http://www.stlport.org/ – vprajan

12

C++ как язык существует много лет, прежде чем STL был стандартизирован и еще несколько лет, прежде чем STL будет последовательно реализован во всех компиляторах. Библиотеки, которые были первоначально написаны в течение этого времени, возможно, не хотели полагаться на STL, чтобы быть более портативными.

Другая причина, связанная с переносимостью, - это встроенное использование. Qt, например, повторно реализует большую часть STL, поскольку приложения Qt иногда нацелены на встроенные платформы (например, смартфоны Nokia), которые могут не иметь доступной реализации STL.

+0

Yup. Тот, кто не знает своей истории, всегда будет озадачен настоящим. Всегда. – dmckee

+0

Не переносится ли STL? Не могли бы вы просто загрузить заголовки STL во встроенную систему и скомпилировать так же легко, как установка Qt-источников? – Inverse

+1

Большой нет .. некоторые функции STL, такие как IO, Allocators требуют портирования или перенацеливания, и, кроме того, QT не может зависеть от компиляторов или внешних библиотек для STL. Наличие собственной STL-перезаписи также помогает оптимизировать и легко перемещать код. ПРИМЕЧАНИЕ: STL изменяется при изменении стандарта C++. – vprajan

4

Выполнение STL различается на каждой платформе, поэтому публикация STL в библиотеке будет иметь риск, например, если вы выставите std :: map в своей библиотеке, так как вы не можете экспортировать std :: map из своей библиотеки, ваша библиотека будет принудительно использовать реализацию std :: map у пользователей вашей библиотеки (тот, который загружает вашу библиотеку), это приведет к некоторой несовместимости, такой как разная версия реализации STL, различный класс распределителя STL и некоторые проблемы, связанные с платформой.

Смежные вопросы