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

Binding C++ member variable : getter/setter or raw pointer?

本文关键字:setter 原始 指针 getter C++ 成员 变量 绑定      更新时间:2023-10-16

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

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

我的问题是:

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

你应该考虑使用 boost::p roperty_map

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

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

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

当然,您需要确保知道字段是什么类型,以便您可以正确操作给定字节偏移量的数据(例如,投射回正确的指针类型)。

但是,在

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