是否可以在非托管代码中使用属性?

时间:2010-09-30 14:53:05

标签: c++ visual-studio-2010 attributes unmanaged

我有一个非托管的C ++应用程序(非托管含义:不使用任何花哨的.Net东西)。我想用一些元信息扩展它,看起来我可以使用属性的概念。

我实际尝试实现的目标如下。 从像这样的简单类开始:

class Book
   {
   public:
      ...
   private:
      string m_name;
      string m_author;
      int    m_year;
   };

我想构建可以访问类的“元信息”并使用它动态构建逻辑的功能,例如。

  • 包含3个编辑字段(姓名,作者,年份)的对话框
  • 包含3列
  • 的数据网格
  • 序列化逻辑
  • 将此类映射到具有3列
  • 的数据库表的逻辑
  • ...

我最疯狂的梦想我想像这样修改这个类:

[id="Book"]
class Book
   {
   public:
      ...
   private:
      [id="Name", defaultValue="", maximumLength=100]
      string m_name;

      [id="Author", defaultValue="", maximumLength=100]
      string m_author;

      [id="Year", defaultValue=2000, minimum=1900]
      int    m_year;
   };

然后能够获得这个'meta'信息来构建对话框,填充数据网格,序列化和反序列化实例,......

但是,属性的​​概念是否仅限于.Net /托管代码?

如果我可以在非托管代码中使用属性,是否可以执行此类操作?什么是开始的好地方? (例子......)

此外,在其他平台上的其他编译器中可以找到相同(或类似)的概念吗?

我正在使用Visual Studio 2010,如前所述,非托管/本机C ++。

2 个答案:

答案 0 :(得分:1)

没有。 C ++没有内省或属性。

根据我所知,查看Boost Serialization的序列化内容,以及手动实现的其他内容。

答案 1 :(得分:1)

Visual C ++在定义COM对象时支持了类似的属性表示法。我认为支持最终会被删除,因为程序员在需要完全控制时使用C ++进行COM实现,并且编译器在程序员控制之外神奇地做事情与此相反。

OTOH IDL仍然允许您定义元数据,它会编译为C ++源代码以及包含元数据的类型库,并且可以在运行时检索它。