Chr*_*ica 9 c++ libstdc++ visual-c++ c++11 libc++
什么是检查的具体C++中的11个功能中存在的一个好方法标准库.
对于编译器功能,我只是检查(IMHO)主要编译器的编译器版本(目前VC++,gcc,clang,也许是英特尔)虽然这不是最好和最灵活的方法,但我不知道还有更好的东西,除了有非常好的宏的铿锵声__has_feature.
但是对于库特征来说更糟糕的是,这些特征并没有严格地与编译器耦合.目前我想使用相同的方法来检查VC++的编译器版本(假设它使用自己的库,它很容易).对于clang,我至少可以__has_include用于大规模的基于头的查询.除此之外我想__GLIBCXX__如果定义检查的值可能是一个好主意,但是我再次找不到任何特定libstdc ++版本引入哪些功能的信息,除了当前版本支持的功能.
这些方法应该保留给预处理器检查等,因为我想在没有任何复杂的配置过程的情况下在只有头的库中使用它而不使用任何第三方库(是的,boost是第三方).
那么在这些(非常狭窄的)条件下检查特定C++ 11库特征的可能性是什么呢?甚至可能在声明的特定功能或类型的规模上?
如果检查编译器或库版本仍然是最好的方法,我在哪里可以找到有关特定版本的libstdc ++支持的特定C++ 11特性的详细信息(也许还有其他重要的特性,libc ++)?
FWIW目前我对<cstdint>C++ 11的<cmath>功能感兴趣std::hash,但这可能会改变,对于一般方法可能并不重要.
除了知道哪个版本的哪个编译器实现了什么并且具有适当的定义之外,你真的没有什么可以做的.
gcc有一个特殊的库功能表.__has_include当然,主要问题是添加到旧版标准中.libstdc++也有必要的包含,但这并不意味着必要的定义来启用这些文件的内容.它也不会告诉你任何可用实现的实际数量(有时是不完整的).
由于你有一个只有头的库,这不适用于你,但仍然很重要:C++ 11和C++ 03之间的二进制不兼容可以回来并咬你.
我真的不会自己接近任何一个,而是使用Boost.Config.最初它只描述了语言功能,但现在已扩展到标准库头.
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |