随着时间的推移,出现了STL*的各种替代实现 - 例如STLPort.某些大公司也出于各种目的使用自己的STL内部端口.
使用C++ 03,可以仅使用可移植的C++语言功能编写STL的端口,这意味着任何符合标准的编译器都应该能够编译它.
但是对于C++ 11,没有某些特性需要编译器支持?
例如,我不知道如何std::is_standard_layout仅使用C++语言功能来实现.我认为std::is_base_of可以std::is_convertible使用base和派生指针来实现.但我无法想象如何std::is_standard_layout实施.可能还有其他功能,我没有想到.
那么,我在这里是否正确?是否仅使用C++语言功能在C++ 11中编写标准库的完整端口是不可能的?
*我知道STL和"C++标准库"不是严格可互换的,但显然我的意思是这种情况下的C++标准库.
Die*_*ühl 19
您无法在任何版本的C++中编写完全可移植的标准C++库实现!首先,一些标准C++库组件清楚地抽象出系统细节.例如,文件流抽象了对文件访问的访问.是的,您可以使用FILE*引擎盖,但我认为标准C库是标准C++库的一部分,便携式实现也需要包含该部分.而且,某些类型实际上取决于编译器,例如,因为存在与它们的语言级交互.例如std::bad_cast,由于a而被抛出dynamic_cast<...>().此外,一些标准C++库组件需要利用有关内存布局的已知信息reinterpret_cast<...>()做正确的事.在其他情况下,标准库指定无法确定的值,例如,某些字段std::numeric_limits<T>.
标准C++库的总体思想是它涵盖了常见需求并实现了某些无法实现可移植和高效实现的功能.您引用的类型特征只是编译器需要提供一些帮助的一些示例.虽然我试图就编译器如何暴露类型特征达成一致,但编译器编写者坚持认为他们需要在他们的选择上自由,并且标准C++库应该只提供一个公共接口来表示特征的暴露方式.
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |