2010-09-30 93 views
1

我有一個非託管的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; 
    }; 

然後能夠得到這個「元」信息,建立對話,填充數據網格,序列化和反序列化的情況下,...

但是,受限於淨屬性的概念/管理碼?

如果我可以在非託管代碼中使用屬性,是否可以做這樣的事情?什麼是開始的好地方? (例子,...)

另外,在其他平臺上可以找到其他編譯器中的相同(或類似)概念嗎?

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

+2

(注意,您不必說非託管,它只是C++,而不是「非託管C++」。Gr Microsoft。) – GManNickG 2010-09-30 15:00:09

+0

完全同意GMan。不幸的是,一旦開始在Microsoft網站上查找C++,他們就會認爲您默認使用.Net。 – Patrick 2010-09-30 15:45:08

回答

1

Visual C++在定義COM對象時支持類似的屬性表示法。我認爲支持最終被拋棄了,因爲程序員在需要完全控制時使用C++進行COM實現,並且編譯器在程序員的控制之外神奇地執行操作與此相反。

OTOH IDL仍然允許您定義元數據,它將編譯爲C++源代碼以及包含元數據的類型庫,並且可以在運行時檢索它。

1

No. C++沒有內省或屬性。

查看Boost Serialization的序列化的東西,其他人需要手動實現它,據我所知。