【问题标题】:using C++11 attributes使用 C++11 属性
【发布时间】:2012-03-25 21:40:57
【问题描述】:

您能否解释一下如何从 C++ 中的属性中获取信息?例如,我想编写 C++ 到 python 绑定。为此,我需要用一些特定的绑定信息来注释类中的所有方法。现在我需要按属性生成一些代码。或者另一个例子,将类映射到数据库实体。还是 C++11 的属性与 Java 或 C# 中的注解不一样?

【问题讨论】:

    标签: c++ c++11 attributes


    【解决方案1】:

    属性(new C++11 feature)只是编译器扩展的标准化语法。要执行您想要的操作,您需要一个具有适当扩展名的编译器。到目前为止,我认为任何编译器都没有实现属性语法,更不用说 Python 绑定的任何特定属性了。

    因为它们是为编译器扩展而设计的,所以没有创建自己的属性的标准方法,就像使用 Java 注释或 C# 属性一样。当然,编译器可以提供这种能力作为扩展...... ;)

    【讨论】:

    • 也就是说,我们当然可以想象将未知属性放入调试器元数据中。但它们仍然不会像 .NET 属性那样被强类型化。
    • @BenVoigt 我认为可以在现有语法 ([[clang::dotnet_like_attribute(attribute_goes_here(args))]]) 的基础上构建 .NET 属性等功能,但我不希望它很快实现。
    • 在哪里可以找到描述 C++11 属性的文档?
    • @AndersonGreen 在C++11 Standard,显然。
    • @R.如果用户尝试在另一个编译器上编译带有属性的代码,Martinho Fernandes 会怎样?属性会被忽略吗?
    【解决方案2】:

    更新一些最新信息:

    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

    【讨论】:

    • 但请注意,GCC 4.8/4.9 中存在一个错误 - 通过插件机制定义全局属性将允许您使用 __attribute__((XXX)) 语法,但不能使用 [[XXX]] 语法。作用域属性正常工作。 GCC bugzilla 中有一个 bug。
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2019-12-21
    • 2013-11-07
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多