我可以查询编译器有关C ++ 0x“alignas”的支持吗?

时间:2011-08-24 04:16:06

标签: c++ c++11 alignment conditional-compilation

我正在编写一些可以从16字节对齐中受益的类和结构。我不是使用特定于编译器的黑客,而是使用新的C ++ 0x alignas功能来实现未来的可移植性。但是,在适当的#ifdef#ifndef警卫之外使用它显然会在没有alignas支持的情况下导致编译器出错。

我快速搜索了类似的问题,the closest match得到了建议Boost.Config的答案。遗憾的是,Boost.Config似乎不包含查询alignas支持的任何功能。是否有其他#ifdef#ifndef我可以用来确定编译器是否支持它?

谢谢!

1 个答案:

答案 0 :(得分:2)

各种C ++ 0x(C ++ 11)工具没有直接的功能支持宏。我只能用两种方法来确定它们的存在。

  1. 列出哪些编译器支持它们,并根据编译器提供的版本宏使用#ifdef指令,例如__GNUC___MSC_VER,或
  2. 使用功能检测脚本(如autoconf)在构建之前检测编译器支持,并使用您自己的宏构建一个头文件,指示对该功能的支持,或者缺少该功能。
  3. 使用Boost.Config实际上是两者的一个示例:Boost具有一组在Boost开发期间运行的功能检测脚本,然后基于编译器版本宏在Boost.Config头中对结果进行硬编码。