2012-04-06 36 views
1

我目前正在尝试设计一个属性系统,将几个类的成员变量绑定到一个序列化程序,并且我想为每个绑定编写尽可能最少的代码,但是要灵活。绑定C++成员变量:getter/setter或原始指针?

我认为getters/setters在大多数情况下并不是非常必要的,所以只有当它们实际触发某些东西时才会使用它们。这些类将提供变量名称的列表,以及指向变量的指针,或者指向getters/setters的指针。

我的问题是:

  • 是由指针实际危险,甚至道德的约束力?
  • 这些类可以在不知道实际实例的情况下给出这些指针吗? (即为每个类的所有实例获取绑定信息一次,并将其存储在某个地方)。 AFAIK,Boost :: bind不允许这样做。

回答

0

危险的是,不道德没有。你可以让这些类成为序列化程序的朋友,并隐藏凡人的绑定内容以提高安全性,然后你就有了一组相关的类,这些类在道德上允许了解彼此的内部结构。

该类可以肯定地返回绑定信息,例如字节偏移量。如果类拥有该类的“原型”对象(即它自己类型的静态成员),这可能是最简单的。然后通过获取原型字段的地址作为const char *并从原型的地址中减去const char *,您将获得该字段的字节偏移量。当然,那么你需要确定你知道字段是什么类型,所以你可以正确地操纵给定字节偏移量的数据(例如转换回正确的指针类型)。

但是,在实现类似这样的事情时有很多问题,主要是确保序列化时有正确的指针类型,而不是指向对象内某个子对象的指针。