【问题标题】:Binding C++ member variable : getter/setter or raw pointer?绑定 C++ 成员变量:getter/setter 还是原始指针?
【发布时间】:2012-04-06 11:23:08
【问题描述】:

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

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

我的问题是:

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

【问题讨论】:

    标签: c++ binding


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多