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

发布于 2024-12-01 00:19:56 字数 483 浏览 0 评论 0原文

我正在编写一些可以从 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 #ifdefs or #ifndefs I can use to figure out whether the compiler supports it?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疏忽 2024-12-08 00:19:56

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

  1. 保留哪些编译器支持它们的列表,并使用基于编译器提供的版本宏的 #ifdef 指令,例如 __GNUC___MSC_VER,或者
  2. 使用功能检测脚本(例如 autoconf)在构建之前检测编译器支持,并使用您自己的宏构建头文件,指示对该功能的支持或缺乏。

使用 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.

  1. Keep a list of which compilers support them, and use #ifdef directives based on the compiler-supplied version macros such as __GNUC__ and _MSC_VER, or
  2. Use a feature-detection script such as autoconf to detect compiler support prior to building, and construct a header file with your own macros indicating support for the feature, or lack thereof.

Using 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文