绑定C++成员变量:getter/setter 或原始指针
Binding C++ member variable : getter/setter or raw pointer?
我目前正在尝试设计一个属性系统,将几个类的成员变量绑定到序列化程序,我想为每个绑定编写尽可能少的代码,但又要灵活。
我认为大多数时候 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 *
,您将获得该字段的字节偏移量。
当然,您需要确保知道字段是什么类型,以便您可以正确操作给定字节偏移量的数据(例如,投射回正确的指针类型)。
但是,在实现这样的东西方面有很多陷阱,这些陷阱主要围绕确保在序列化时具有正确的指针类型,而不是指向对象中某个子对象的指针。
相关文章:
- 将浮动的heightmap数组导出为16位原始值
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 如何为 C 型字符串数组编写 getter 和 setter?
- 如何将原始字节附加到 std::vector?
- C++ Setter/Getter,cout 工作,printf 失败
- 从堆栈分配的原始指针构造智能指针
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 将unique_ptr分配给原始指针
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 从原始字节解码协议缓冲区(以 C++为单位)
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- C++:尝试使用等效的 STL 算法消除原始循环
- 如何在连接器 C++ 中将原始字节转换为字符串
- 当要访问的对象被多次封装时,如何正确使用setter
- 通过引用传递类不会更改原始类
- 绑定C++成员变量:getter/setter 或原始指针