【发布时间】:2012-03-25 21:40:57
【问题描述】:
您能否解释一下如何从 C++ 中的属性中获取信息?例如,我想编写 C++ 到 python 绑定。为此,我需要用一些特定的绑定信息来注释类中的所有方法。现在我需要按属性生成一些代码。或者另一个例子,将类映射到数据库实体。还是 C++11 的属性与 Java 或 C# 中的注解不一样?
【问题讨论】:
标签: c++ c++11 attributes
您能否解释一下如何从 C++ 中的属性中获取信息?例如,我想编写 C++ 到 python 绑定。为此,我需要用一些特定的绑定信息来注释类中的所有方法。现在我需要按属性生成一些代码。或者另一个例子,将类映射到数据库实体。还是 C++11 的属性与 Java 或 C# 中的注解不一样?
【问题讨论】:
标签: c++ c++11 attributes
属性(new C++11 feature)只是编译器扩展的标准化语法。要执行您想要的操作,您需要一个具有适当扩展名的编译器。到目前为止,我认为任何编译器都没有实现属性语法,更不用说 Python 绑定的任何特定属性了。
因为它们是为编译器扩展而设计的,所以没有创建自己的属性的标准方法,就像使用 Java 注释或 C# 属性一样。当然,编译器可以提供这种能力作为扩展...... ;)
【讨论】:
[[clang::dotnet_like_attribute(attribute_goes_here(args))]]) 的基础上构建 .NET 属性等功能,但我不希望它很快实现。
更新一些最新信息:
GCC 现在(从 4.8 开始)实现 C++11 属性作为 __attribute__((XXX)) 的替代语法。
您还可以使用 GCC 插件机制来定义新属性 - 请参阅 https://gcc.gnu.org/onlinedocs/gccint/Plugins.html。
您也可以使用 gcc-python-plugin 在 python 中执行此操作 - 请参阅 https://gcc-python-plugin.readthedocs.org/en/latest/attributes.html。
【讨论】:
__attribute__((XXX)) 语法,但不能使用 [[XXX]] 语法。作用域属性正常工作。 GCC bugzilla 中有一个 bug。