我可以查询编译器有关 C++0x “alignas” 的信息吗?支持?
我正在编写一些可以从 16 字节对齐中受益的类和结构。我宁愿使用新的 C++0x alignas
功能来实现未来的可移植性,而不是使用特定于编译器的 hack。但是,在适当的 #ifdef
或 #ifndef
防护之外使用它显然会在没有 alignas
支持的编译器上导致错误。
我快速搜索了类似的问题,最接近的匹配有一个推荐 Boost 的答案。配置
。不幸的是,Boost.Config
似乎不包含任何查询 alignas
支持的功能。是否还有其他 #ifdef
或 #ifndef
我可以用来确定编译器是否支持它?
谢谢!
I'm writing a few classes and structs that could benefit from 16-byte alignment. Instead of using compiler-specific hacks, I'd rather use the new C++0x alignas
functionality for future portability. However, using it outside of appropriate #ifdef
or #ifndef
guards will obviously cause errors on compilers without alignas
support.
I did a quick search for similar questions, and the closest match had an answer recommending Boost.Config
. Unfortunately, Boost.Config
doesn't seem to include any functionality for querying alignas
support. Are there any other #ifdef
s or #ifndef
s I can use to figure out whether the compiler supports it?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
各种 C++0x (C++11) 工具没有直接的功能支持宏。我能想到的只有两种方法来确定他们的存在。
#ifdef
指令,例如__GNUC__
和_MSC_VER
,或者使用 Boost.Config 实际上是两者的一个示例:Boost 有一组在 Boost 开发期间运行的功能检测脚本,然后根据编译器版本宏将结果硬编码在 Boost.Config 标头中。
There are no direct feature-support macros for the various C++0x (C++11) facilities. There only two ways I can think of to determine their presence.
#ifdef
directives based on the compiler-supplied version macros such as__GNUC__
and_MSC_VER
, orUsing Boost.Config is actually an example of both: Boost has a set of feature-detection scripts which are run during Boost development, and then the results hard-coded in the Boost.Config headers based on the compiler version macros.