C++ 我可以向编译器查询C++;0x";“alignas”;支持?

C++ 我可以向编译器查询C++;0x";“alignas”;支持?,c++,c++11,alignment,conditional-compilation,C++,C++11,Alignment,Conditional Compilation,我正在编写一些类和结构,它们可以从16字节对齐中获益。为了将来的可移植性,我宁愿使用新的C++0xalignas功能,而不是使用特定于编译器的hack。但是,在适当的#ifdef或#ifndef保护之外使用它显然会在不支持alignas的编译器上导致错误 我快速搜索了类似的问题,得到了一个建议Boost.Config的答案。不幸的是,Boost.Config似乎不包含任何查询alignas支持的功能。是否有其他#ifdef或#ifndef可用于确定编译器是否支持它 谢谢 各种C++0x(C++1

我正在编写一些类和结构,它们可以从16字节对齐中获益。为了将来的可移植性,我宁愿使用新的C++0x
alignas
功能,而不是使用特定于编译器的hack。但是,在适当的
#ifdef
#ifndef
保护之外使用它显然会在不支持
alignas
的编译器上导致错误

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


谢谢

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

  • 保留支持它们的编译器的列表,并根据编译器提供的版本宏(如
    \uu GNUC\uuu
    \u MSC\u VER
    )使用
    \ifdef
    指令,或
  • 在构建之前,使用功能检测脚本(如autoconf)来检测编译器支持,并使用您自己的宏来构造头文件,指示是否支持该功能

  • 使用Boost.Config实际上是两者的一个例子:Boost有一组在Boost开发期间运行的功能检测脚本,然后根据编译器版本宏将结果硬编码到Boost.Config头中。

    这就是Autoconf的用途。有没有办法专门检查Autoconf对alignas的支持?即使有,我也不认为autoconf是我的选择。即使我不害怕学习配置脚本,它也只适用于GNU工具链,对吗?在一般意义上,我不想将我的代码限制在GNU构建系统中。在我的特定情况下,我正在编写一个用于AviSythC++的插件,它需要由MSVC编译(尽管有些已经在ICC中成功)。BTW,我理解我可以使用DeScCube(AlgIn(16))来完成这个特定的项目(现在我已经指定MSVC;)。类似地,如果我专门针对GCC(在本例中我没有),我可以使用_属性((aligned(16)))。换句话说,无法测试alignas(16)并不完全是一个障碍。我想我只是想在可能的情况下养成使用新标准功能的习惯。谢谢。由于没有任何标准宏,Boost.Config开发人员也没有抽出时间来添加对该特定功能的检查,我想这只能归结为自动工具或手动跟踪编译器版本。真遗憾,但这些都是休息时间。:)