簡體   English   中英

C ++ 11及更高版本中的替代STL實現

[英]Alternative STL implementations in C++11 and beyond

隨着時間的推移,出現了STL *的各種替代實現 - 例如STLPort。 某些大公司也出於各種目的使用自己的STL內部端口。

使用C ++ 03,可以僅使用可移植的C ++語言功能編寫STL的端口,這意味着任何符合標准的編譯器都應該能夠編譯它。

但是使用C ++ 11,是否有某些特性需要編譯器支持?

例如,我沒有看到如何僅使用C ++語言功能來實現std::is_standard_layout 我認為std::is_base_of可以用std::is_convertible ,使用基指針和派生指針。 但我無法想象如何實現std::is_standard_layout 可能還有其他功能,我沒有想到。

那么,我在這里是否正確? 是否使用C ++語言功能在C ++ 11中編寫標准庫的完整端口是不可能的?

*我知道STL和“C ++標准庫”不是嚴格可互換的,但顯然我的意思是這種情況下的C ++標准庫。

您無法在任何版本的C ++中編寫完全可移植的標准C ++庫實現! 首先,一些標准的C ++庫組件清楚地抽象出系統細節。 例如,文件流抽象了對文件訪問的訪問。 是的,您可以使用FILE* ,但我認為標准C庫是標准C ++庫的一部分,便攜式實現也需要包含該部分。 而且,某些類型實際上取決於編譯器,例如,因為存在與它們的語言級交互。 例如,由於dynamic_cast<...>()而拋出std::bad_cast 此外,一些標准C ++庫組件需要利用有關內存布局的已知信息,並且reinterpret_cast<...>()執行正確的事情。 在其他情況下,標准庫指定無法確定的值,例如std::numeric_limits<T>某些字段。

標准C ++庫的總體思想是它涵蓋了常見需求並實現了某些無法實現可移植和高效實現的功能。 您引用的類型特征只是編譯器需要提供一些幫助的一些示例。 雖然我試圖就編譯器如何暴露類型特征達成一致,但編譯器編寫者堅持認為他們需要自由選擇,標准C ++庫應該只提供一個公共接口來表示特征的暴露方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM