C++標準庫是與編譯器綁定還是可以提供不同的實現?C++標準庫是否可以替換?
我很想知道這一點,因爲看起來typeid
關鍵字和std::type_info
之間的關係阻礙了這一點。 typeid
關鍵字取決於std::type_info
的存在,我認爲這是一個錯誤方向的依賴關係。我不知道自定義實現應該如何實現type_info::name()
方法。
我的問題是:
- 標準庫替換?
- 如果是的話,那麼一個人如何實現
std::type_info
C++標準庫是與編譯器綁定還是可以提供不同的實現?C++標準庫是否可以替換?
我很想知道這一點,因爲看起來typeid
關鍵字和std::type_info
之間的關係阻礙了這一點。 typeid
關鍵字取決於std::type_info
的存在,我認爲這是一個錯誤方向的依賴關係。我不知道自定義實現應該如何實現type_info::name()
方法。
我的問題是:
std::type_info
大部分是獨立的編譯器,如容器和算法。
其他部分與特定的編譯器非常相關,就像您已經找到的那樣 - type_info
其中庫相當地記錄了編譯器做了什麼而不是規定了它。
其他類似的例子可能是bad_exception,std :: size_t和C++ 11的特性,如type_traits,atomics和std :: initializer_list,這些都需要編譯器的支持。庫必須與特定的編譯器實際執行的內容緊密匹配。
可以編寫一個可與多個編譯器一起工作的庫,但不能將某些低級代碼調優到每個特定的編譯器。其他地方提到的圖書館正是如此。
是的,有各種各樣的「補充交易」的:
編輯:
由於這顯然是對C++標準庫,也有一些替代它:
+1:MS Visual Studio有自己的實現。 – Naszta
@Naszta - 這是基於Dinkumware庫。 –
@Naszta不,它使用Dinkumware庫中添加VS特定的東西。 – Praetorian
是的,即使不同的編譯器有STL的默認實現,STL並沒有被編譯器綁定。 您通常可以通過更改某個項目設置來更改STL實施。
E.g.在vS2008中,你可以做
工具 - >選項 - >項目和解決方案 - > VC++ Directoires - >包括fiels,添加一個不同的實現(例如STL PORT),然後將這一行移到最上面(默認實現),那麼你有它。
一個替代STL的多個示例,犧牲了一些標準遵守速度:文庫的EASTL(由電子藝術)https://github.com/paulhodge/EASTL
哪一個標準根本不存在。 – MSalters
對應答者的注意:STL!=標準庫。 STL僅僅是標準庫的一部分。 STL只能替換一個庫。標準庫不是。 –