我已經實現,使用宏,C++的屬性系統,該系統滿足以下要求:C++:基於產權制度轉換宏使用模板
- 屬性可以使用integeral關鍵
- 屬性引用可以通過一套通用的訪問/獲取
- 屬性(和財產鍵)必須是可繼承
- 性能可與getter/setter方法進行註冊
和如下
- 每個屬性屬於一類
- 每個屬性都用唯一的密鑰是「宣佈」的繼承鏈中實現。 (使用相當聰明的__ COUNTER __ hack實現)。它具有以下特點
- 根類(無父母)從0開始
- 子類編號的屬性將開始從父的最後一個ID編號它的屬性+ 1
class A
{
static const unsigned int Property_0 = GET_KEY_MACRO; //expands to 0
static const unsigned int Property_1 = GET_KEY_MACRO; //expands to 1
};
class B : public A
{
static const unsigned int Property_0 = GET_KEY_MACRO(A); //expands to 2
//and so forth
};
class C : public A
{
static const unsigned int Property_0 = GET_KEY_MACRO(A); //expands to 2. different inheritance chain
};
- 其他代碼可以使用靜態常量id來引用屬性。
objectinstance.SetValue(C::Property_0, 5)
- 每個屬性是通過使用膨脹到虛擬方法的宏 '註冊'。宏目前允許屬性類型,一個getter和setter方法進行註冊
BEGIN_PROPERTIES
REG_PROP(Property_0, int)
REG_PROP_G(Property_1, int, getterFunc)
...
END_PROPERTIES
//expands to
virtual void registerProperties()
{
register(blah, blah, ...)
}
,需要一個屬性鍵和做一些背景魔法設置
- 的SetValue /的GetValue /得到它(已經實現)
任何人都可以想到基於模板的方法是相當於/更簡單的上述系統?
注意:此屬性系統專爲遠程RPC電話以及快速本地訪問而設計。
'__COUNTER__'是爲執行而保留的名稱,並且可以很好地使用這樣一個簡單的名稱。堅持_cOUNTER_或_jAMESZHAO00_COUNTER(等)是安全的。 – MSalters 2009-09-07 10:17:53
__ COUNTER __是一個預定義的宏變量。 – jameszhao00 2009-09-07 12:47:22