如何(以及谁可以)实现C++委员会定义的标准库功能?

6 c++ c++-standard-library c++11

当C++委员会在下一个语言标准中发布将成为标准库一部分的新功能时,他们还会发布一些源代码或某些关于如何实现该功能的指导?

我们unique_ptr以此为例.语言委员会只是为该类模板定义了一个接口,让编译器供应商按需要实现它?如何实现标准库功能的实现过程.

任何人都可以为没有支持的平台实现标准库的部分吗?假设我想实现C++标准库的一些很酷的功能,以便在微控制器环境中使用它.我怎么能这样做?我应该在哪里寻找信息?如果我决定将项目开源,我可以这样做吗?我是否需要完全遵循标准所说的内容,或者我可以编写不合规的版本?

Whi*_*TiM 7

通常情况下,

  • 每个新的图书馆功能都会通过一个提案.

  • 如果这个建议让到C++委员会的图书馆演进工作组,它通过一系列迭代(一个"强硬地"我所知).

  • 它经历了这里描述的一系列改进过程

  • 如果它需要(TS)技术规范(从C++ 11开始),它就会被淘汰.例如,在C++ 17之前#include <filesystem>的文件系统TS中.

  • 我相信委员会喜欢的一件事是实施经验.

  • 更多信息可以在ISOCpp网站上找到

那么,关于实施:

  • 有许多"库特征"无法纯粹作为库实现.他们需要编译器支持.在这些情况下,编译器提供了可以挂钩的"内在".举例来说,clang 为某些type_traits提供内在函数

  • 大多数库特性都有一些实现经验,主要来自Boost库.

  • 您实际上可以查看编译器附带的默认标准库的源代码:

  • 遗憾的是,大多数实现使用了大量的下划线.主要是因为它们保留供"标准库"使用.


任何人都可以为没有支持的平台实现标准库的部分吗?

是的,您可以,到目前为止,您的编译器支持该平台,并且平台或操作系统提供可用的API.例如.std::cout,元素std::ifstream以及更多需要平台特定的支持.

假设我想实现C++标准库的一些很酷的功能,以便在微控制器环境中使用它.我怎么能这样做?

您可以查看其他人的代码并从那里开始.我们向巨人学习.一些开源示例:

我怎么能这样做?我应该在哪里寻找信息?

  • 您可以查看将该功能引入C++库的论文.例如,std::optional有一个独立的执行在这里将其作为在提案阶段的参考实现.

  • 您可以检查标准库,并进行费力的研究.:-)

  • 搜索互联网.:-)
  • 或者按照标准的规定从头开始编写

我是否需要完全遵循标准所说的内容,或者我可以编写不合规的版本?

没有强制要遵循C++标准库指定的内容.那将是你自己的"图书馆".


Ser*_*eyA 6

正式,没有.与所有标准一样,C++ Standard设置规则,但不提供实现.但是,从实际角度来看,几乎不可能在没有提议的实现的情况下将新功能引入标准库,因此您经常可以找到附加到提案的那些功能.

关于"你能写不合规的版本"的问题,你可以做任何你想做的事.采用可能取决于您的合规性,或者可能不会 - 已知超级广泛采用的MSVC违反C++标准.