我正在编写一些可以从16字节对齐中受益的类和结构。我不是使用特定于编译器的黑客,而是使用新的C ++ 0x alignas
功能来实现未来的可移植性。但是,在适当的#ifdef
或#ifndef
警卫之外使用它显然会在没有alignas
支持的情况下导致编译器出错。
我快速搜索了类似的问题,the closest match得到了建议Boost.Config
的答案。遗憾的是,Boost.Config
似乎不包含查询alignas
支持的任何功能。是否有其他#ifdef
或#ifndef
我可以用来确定编译器是否支持它?
谢谢!
答案 0 :(得分:2)
各种C ++ 0x(C ++ 11)工具没有直接的功能支持宏。我只能用两种方法来确定它们的存在。
#ifdef
指令,例如__GNUC__
和_MSC_VER
,或使用Boost.Config实际上是两者的一个示例:Boost具有一组在Boost开发期间运行的功能检测脚本,然后基于编译器版本宏在Boost.Config头中对结果进行硬编码。