绑定C ++成员变量:getter / setter还是原始指针?

时间:2012-04-06 11:23:09

标签: c++ binding

我目前正在尝试设计一个属性系统,将几个类的成员变量绑定到一个序列化器,我想为每个绑定编写尽可能少的代码,但又要灵活。

我认为getter / setter在大多数情况下并不是必需的,所以它们只会在实际触发某些东西时使用。这些类将提供变量名称列表,以及指向变量的指针,指向getter / setter的指针。

我的问题是:

  • 指针绑定实际上是危险的还是道德的?
  • 这些类可以在不知道实际实例的情况下提供这些指针吗? (即为每个类的所有实例获取一次绑定信息,并将其存储在某处)。 AFAIK,Boost :: bind不允许这样做。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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

该类绝对可以返回绑定信息,例如字节偏移量。如果该类拥有该类的“原型”对象(即其自身类型的静态成员),则可能是最简单的。然后将原型字段的地址作为const char *并从原型的地址中减去const char *,得到字段的字节偏移量。

当然,您需要确保知道该字段的类型,因此您可以在给定字节偏移量的情况下正确操作数据(例如,返回到正确的指针类型)。

然而,实现类似的东西有许多问题,主要是围绕确保序列化时具有正确的指针类型,而不是指向对象中某个子对象的指针。