std::byte如果可用,我想使用 C++17 的类型,unsigned char如果没有,则回退使用,即类似于
#include <cstddef>
namespace my {
#if SOMETHING
using byte = std::byte;
#else
using byte = unsigned char;
#endif
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它似乎std::byte没有附带通常的功能测试宏,所以SOMETHING上面应该是什么并不明显。(AFAIK __cplusplus'17的值尚未设置,所以我也无法测试。)
那么,有没有人知道一种检测std::byte三大编译器是否可用的方法?
如果您想测试可用性std::byteC++17 引入的可用性,你应该使用__cpp_lib_byte宏(功能测试宏的完整列表在这里)。
示例用法:
#include <iostream>
#include <cstddef>
#if __cpp_lib_byte
using byte = std::byte;
#else
using byte = unsigned char;
#endif
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于 C++17, 的__cplusplus值为201703L。但这并不是非常有用。
相反,您应该看看SD-6。本文档包含 C++ 中采用的所有功能的所有功能测试宏,并且供应商都同意遵循它们。实现可能提供功能但不提供宏(例如,gcc 7.2 支持std::byte但不提供宏),更明显的是,实现提供功能和宏,但功能有错误,但您应该依赖宏。这就是它的用途。
请注意,使用unsigned char为您提供几乎完全相同的行为std::byte- 唯一的区别是unsigned char支持额外的算术运算。因此,对支持进行不精确的检查std::byte是可以的 - 只要您在某些支持的编译器上进行测试std::byte以验证您没有做任何不正常的事情,就可以了。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |