Является ли C++ стандартная библиотека заменяемой?
Является ли стандартная библиотека С++ привязана к компилятору или может быть предоставлена другая реализация?
Интересно об этом в основном потому, что кажется, что отношение между ключевым словом typeid
и std::type_info
мешает этому. Ключевые слова typeid
зависят от существования std::type_info
, который я считаю зависимым в неправильном направлении. И я понятия не имею, как пользовательская реализация должна реализовать метод type_info::name()
.
Мои вопросы:
- Является ли стандартная библиотека заменяемой?
- Если да, то как реализовать
std::type_info
Ответы
Ответ 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