2012-04-06 41 views
1

我目前正在嘗試設計一個屬性系統,將幾個類的成員變量綁定到一個序列化程序,並且我想爲每個綁定編寫儘可能最少的代碼,但是要靈活。綁定C++成員變量:getter/setter或原始指針?

我認爲getters/setters在大多數情況下並不是非常必要的,所以只有當它們實際觸發某些東西時纔會使用它們。這些類將提供變量名稱的列表,以及指向變量的指針,或者指向getters/setters的指針。

我的問題是:

  • 是由指針實際危險,甚至道德的約束力?
  • 這些類可以在不知道實際實例的情況下給出這些指針嗎? (即爲每個類的所有實例獲取綁定信息一次,並將其存儲在某個地方)。 AFAIK,Boost :: bind不允許這樣做。

回答

0

危險的是,不道德沒有。你可以讓這些類成爲序列化程序的朋友,並隱藏凡人的綁定內容以提高安全性,然後你就有了一組相關的類,這些類在道德上允許瞭解彼此的內部結構。

該類可以肯定地返回綁定信息,例如字節偏移量。如果類擁有該類的「原型」對象(即它自己類型的靜態成員),這可能是最簡單的。然後通過獲取原型字段的地址作爲const char *並從原型的地址中減去const char *,您將獲得該字段的字節偏移量。當然,那麼你需要確定你知道字段是什麼類型,所以你可以正確地操縱給定字節偏移量的數據(例如轉換回正確的指針類型)。

但是,在實現類似這樣的事情時有很多問題,主要是確保序列化時有正確的指針類型,而不是指向對象內某個子對象的指針。