gpt4 book ai didi

c++ - 检查 C++11 库功能

转载 作者:可可西里 更新时间:2023-11-01 16:34:43 26 4
gpt4 key购买 nike

检查标准库是否存在特定 C++11 功能的好方法是什么。

对于编译器功能,我只是检查了(恕我直言)主要编译器(VC++gccclang 目前,也许是 Intel)虽然这不是最好和最灵活的方法,但我还不知道有什么更好的方法,除了 clang不错__has_feature宏。

但对于库功能来说更糟,它们并没有严格耦合到编译器。目前我想使用相同的方法来检查 VC++ 的编译器版本(这很简单,假设它使用自己的库)。对于 clang 我至少可以使用 __has_include用于大规模的基于标题的查询。除此之外我想检查__GLIBCXX__如果定义了它的值可能是个好主意,但我又找不到任何关于特定 libstdc++ 版本引入了哪些功能的信息,除了当前版本支持的功能。

这些方法应该保留给预处理器检查等,因为我想在没有任何复杂配置过程且不使用任何第三方库(是的,boost 是第三方)。

  1. 那么在那些(相当狭窄的)条件下,我检查特定 C++11 库功能的可能性有多大。甚至可能在声明的特定函数或类型的规模上?

  2. 如果检查编译器或库版本仍然是最好的方法,我在哪里可以找到有关 特定 版本支持的特定 C++11 功能的详细信息libstdc++(也许还有其他重要的,libc++)?

FWIW 目前我对 <cstdint> 很感兴趣, C++11 <cmath>函数和 std::hash ,但这可能会改变,并且对于一般方法可能并不重要。

最佳答案

除了知道哪个编译器在哪个版本中实现什么以及有适当的定义之外,您在这里真的没有什么可以做的。

gcc 有一个 special table用于库功能。 __has_include 的主要问题当然是对旧包含中的标准的补充。 libstdc++ 也有必要的包含,但这并不意味着启用这些文件的内容所必需的定义。它也不会告诉您有关可用实现的实际数量的任何信息(有时是不完整的)。

因为你有一个只有头文件的库,所以这对你不适用,但仍然很重要:C++11 和 C++03 之间的二进制不兼容可能会回来咬你一口。

我真的不会自己处理任何这些,而是​​使用 Boost.Config .最初它只描述语言特性,但现在已扩展到标准库头文件。

关于c++ - 检查 C++11 库功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com