如何避免过度调整课程大小以应对罕见情况?

时间:2016-08-30 06:08:26

标签: c++ oop inheritance hierarchy

我正在尝试设计一个在我的物理引擎中使用的分层转换类。 首先,这是一个片段:

class Transform
{
public:
  Transform();
  ~Transform();

private:
  glm::mat3x3 local_to_world; // matrix of self and concatenated parents.

  glm::vec2 w_translation; // only needed if the object uses hierarchy
  glm::vec2 w_scale;       // only needed if the object uses hierarchy
  float w_rotation;        // only needed if the object uses hierarchy

  // the local coordinates of the root object are the same as its world coordinates.
  glm::vec2 l_translation;
  glm::vec2 l_scale;
  float l_rotation;

  Transform *parent;    // only needed if the object uses hierarchy
  Transform *root;      // only needed if the object uses hierarchy
  std::forward_list<Transform *> children;     // you guessed it...

  bool modified;

  // an additional problem is that these functions are called after any
  // update to the transform whatsoever, and are totally useless if the
  // object is not using hierarchy
  void update_w_trans();
  void update_w_scale();
  void update_w_rotation();

  // ...
};

实际上,用户很可能只对少数几个对象使用父母。这意味着,对于任何不使用育儿的对象,都会有相当大的记忆和工作浪费。考虑到变换是一个非常常见的组件,我觉得这是一个大问题。

我想出了几个可能的解决方案:

  1. 将所有仅限层次结构的数据抛出到自己的结构中,并在类上保留指向该数据的指针。这需要在方法中进行 LOT 的空检查。

  2. 围绕包含变换指针的变换构建包装类。大多数方法都是一行,并在指针上调用方法,但是 如果调用一个会导致层次结构的方法(例如add_child),则进行一次转换为派生类。

  3. 我自己是一个相当缺乏经验的C ++ / OOP程序员,之前并没有真正遇到这样的问题,但我觉得这必须成为所有OOP的一个共同概念。

    我想知道这些中的一个或两个是否是一种常用的方法,或者是否有更好的方法来解决这个问题,这样可以减少浪费,同时仍然保持界面简单?

0 个答案:

没有答案