1

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

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

我的问题是:

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

2 回答 2

1

您应该考虑使用 boost::property_map

http://www.boost.org/doc/libs/1_49_0/libs/property_map/doc/property_map.html

于 2012-04-06T12:02:07.220 回答
0

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

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

当然,您需要确保您知道该字段是什么类型,这样您才能正确操作给定字节偏移量的数据(例如,转换回正确的指针类型)。

然而,实现这样的东西有很多陷阱,主要围绕确保在序列化时具有正确的指针类型,而不是指向对象中某个子对象的指针。

于 2012-04-06T12:03:54.030 回答