Подтвердить что ты не робот

Является ли C++ стандартная библиотека заменяемой?

Является ли стандартная библиотека С++ привязана к компилятору или может быть предоставлена ​​другая реализация?

Интересно об этом в основном потому, что кажется, что отношение между ключевым словом typeid и std::type_info мешает этому. Ключевые слова typeid зависят от существования std::type_info, который я считаю зависимым в неправильном направлении. И я понятия не имею, как пользовательская реализация должна реализовать метод type_info::name().

Мои вопросы:

  • Является ли стандартная библиотека заменяемой?
  • Если да, то как реализовать std::type_info
4b9b3361

Ответ 1

Большие части библиотеки не зависят от компилятора, как контейнеры и алгоритмы.

Другие части очень привязаны к определенному компилятору, как вы уже нашли - type_info, где библиотека скорее документирует то, что делает компилятор, а не предписывает его.

Другими подобными примерами могут быть bad_exception, std:: size_t и С++ 11, такие как type_traits, atomics и std:: initializer_list, которые все требуют поддержки от компилятора. Библиотека должна быть точно сопоставлена ​​с тем, что на самом деле делает конкретный компилятор.

Можно написать библиотеку, которая работает с несколькими компиляторами, но не без настройки некоторого кода низкого уровня для каждого конкретного компилятора. Библиотеки, упомянутые в другом месте, делают именно это.

Ответ 2

Да, существует множество "STL":

  • Оригинальная реализация STL Степановым и Ли. 1994, Hewlett-Packard. Больше не поддерживается.
  • SGI STL, основанный на оригинальной реализации Степановым и Ли. 1997, Silicon Graphics. Больше не поддерживается.
  • libstdС++ из gnu (был частью libg++)
  • libС++ from clang
  • STLPort, основанный на SGI STL
  • Стандартная библиотека Rogue Wave (HP, SGI, SunSoft, Siemens-Nixdorf).
  • Библиотека Dinkum STL от P.J. Plauger

Edit:

Так как это, по-видимому, о стандартной библиотеке С++, есть и другие альтернативы:

Ответ 3

Это сменная. Посмотрите stl port

Ответ 4

Да, STL не привязан к компилятору, хотя у другой компиляции есть стандартная реализация STL по умолчанию. Обычно вы можете изменить реализацию STL, изменив некоторые настройки проекта.

например. В vS2008 вы можете сделать

Инструменты- > Параметры- > Проект и решения → VС++ Directoires → Включите фили, добавьте другую реализацию (например, STL PORT), затем переместите эту строку вверх (над реализацией по умолчанию), а затем у вас есть.

Ответ 5

Еще один пример альтернативного STL, пожертвовавшего некоторым стандартным соответствием для скорости: EASTL (by Electronic Arts) https://github.com/paulhodge/EASTL