我有一个非托管的C ++应用程序(非托管含义:不使用任何花哨的.Net东西)。我想用一些元信息扩展它,看起来我可以使用属性的概念。
我实际尝试实现的目标如下。 从像这样的简单类开始:
class Book
{
public:
...
private:
string m_name;
string m_author;
int m_year;
};
我想构建可以访问类的“元信息”并使用它动态构建逻辑的功能,例如。
我最疯狂的梦想我想像这样修改这个类:
[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 ++。
答案 0 :(得分:1)
没有。 C ++没有内省或属性。
根据我所知,查看Boost Serialization的序列化内容,以及手动实现的其他内容。
答案 1 :(得分:1)
Visual C ++在定义COM对象时支持了类似的属性表示法。我认为支持最终会被删除,因为程序员在需要完全控制时使用C ++进行COM实现,并且编译器在程序员控制之外神奇地做事情与此相反。
OTOH IDL仍然允许您定义元数据,它会编译为C ++源代码以及包含元数据的类型库,并且可以在运行时检索它。