Некоторые библиотеки с открытым исходным кодом имеют тенденцию к повторному внедрению базовых структур, таких как строка, список, стек, очередь ... Почему они не используют библиотеку stl? Неужели stl недостаточно хорош?Почему некоторые библиотеки должны реализовывать базовую структуру данных?
ответ
Выявление типов STL в заголовках может в некоторых случаях приводить к неприятным, неприятным временам ссылок. В крупных проектах это может быть достаточной причиной, чтобы «спрятать» их за проприетарным API.
C++ как язык существует много лет, прежде чем STL был стандартизирован и еще несколько лет, прежде чем STL будет последовательно реализован во всех компиляторах. Библиотеки, которые были первоначально написаны в течение этого времени, возможно, не хотели полагаться на STL, чтобы быть более портативными.
Другая причина, связанная с переносимостью, - это встроенное использование. Qt, например, повторно реализует большую часть STL, поскольку приложения Qt иногда нацелены на встроенные платформы (например, смартфоны Nokia), которые могут не иметь доступной реализации STL.
Yup. Тот, кто не знает своей истории, всегда будет озадачен настоящим. Всегда. – dmckee
Не переносится ли STL? Не могли бы вы просто загрузить заголовки STL во встроенную систему и скомпилировать так же легко, как установка Qt-источников? – Inverse
Большой нет .. некоторые функции STL, такие как IO, Allocators требуют портирования или перенацеливания, и, кроме того, QT не может зависеть от компиляторов или внешних библиотек для STL. Наличие собственной STL-перезаписи также помогает оптимизировать и легко перемещать код. ПРИМЕЧАНИЕ: STL изменяется при изменении стандарта C++. – vprajan
Выполнение STL различается на каждой платформе, поэтому публикация STL в библиотеке будет иметь риск, например, если вы выставите std :: map в своей библиотеке, так как вы не можете экспортировать std :: map из своей библиотеки, ваша библиотека будет принудительно использовать реализацию std :: map у пользователей вашей библиотеки (тот, который загружает вашу библиотеку), это приведет к некоторой несовместимости, такой как разная версия реализации STL, различный класс распределителя STL и некоторые проблемы, связанные с платформой.
Одной из причин может быть то, что STL контейнеры не предназначены для использования в качестве базовых классов - STL design issues Wikipedia
- 1. Использует ли LINQ базовую структуру данных?
- 2. Должны ли объекты реализовывать интерфейсы?
- 3. Когда и почему сущности JPA должны реализовывать интерфейс Serializable?
- 4. Вложенная структура - получить «базовую» структуру
- 5. Определение свойств, которые должны реализовывать подклассы
- 6. Когда мы должны реализовывать интерфейс Serializable?
- 7. C#: Абстрактные классы должны реализовывать интерфейсы?
- 8. Должны ли мои объекты Doctrine реализовывать интерфейсы?
- 9. Почему классы, предназначенные для наследования, должны редко реализовывать интерфейс Serializble?
- 10. Почему мы должны реализовывать чистую виртуальную функцию в этом случае?
- 11. Java: Какие классы должны реализовывать Serializable
- 12. Почему conda обновляет некоторые библиотеки
- 13. Какие структуры данных должны реализовывать дерево с двумя типами листов?
- 14. Должны ли все классы реализовывать интерфейс IDisposable?
- 15. Какие объекты реле должны реализовывать `Node`?
- 16. Почему/Когда я должен использовать базовую реляционную структуру
- 17. Почему некоторые модули Python должны быть «скомпилированы»?
- 18. Прокрутка для удаления не удаляет базовую структуру данных
- 19. Swift: Как создать базовую структуру данных в приложении
- 20. Почему ViewModel должен реализовывать INotifyPropertyChanged?
- 21. вам нужно создать базовую структуру с рубином?
- 22. Почему некоторые IOException выбрасываются из кода библиотеки?
- 23. Почему выгодно выравнивать структуру данных?
- 24. Почему нет .Net имеет структуру данных Set?
- 25. Какую конкретную базовую структуру или язык следует использовать?
- 26. которой структуру данных следует выбрать и почему
- 27. Какой стандарт говорит, какие классы должны реализовывать Java SE?
- 28. Должны ли статические свойства в классе Constants реализовывать поля поддержки?
- 29. Начало работы с Эмбер-Model: Ember.Adapter подклассы должны реализовывать FindAll
- 30. Почему класс составных идентификаторов должен реализовывать Serializable?
Это еще хуже для повышения .. черт возьми, мне просто пришлось добавить хак в нашу сборную систему на работу, чтобы пропустить заголовки форматирования при компиляции информации 'ctags', потому что у нее закончилась нехватка памяти. – Tom
@ Тома +1 - удар тяжелый и невыносимый. Иногда я предпочитаю STLPort: http://www.stlport.org/ – vprajan