首页 > 解决方案 > 最佳实践:c++ 中的额外方法

问题描述

所以,我正在做一个项目,其中有一个名为 Window 的类,该类的目标是存储窗口的状态(窗口是打开还是关闭)并拥有一个切换窗口的方法 Toggle。

class Window {
 public:
  explicit Window(bool is_open);

  Window(const Window&) = default;
  Window& operator=(const Window&) = default;

  ~Window() {}

  // Returns if the window is open.
  bool is_open();

  // Toggles the window. Returns if the window is now open.
  bool Toggle();

 private:
  bool is_open_;
};

但是,我一直在考虑该类是否还应该有两个方法,称为 Open 和 Close,它们的功能与名称所暗示的完全一样。这种方法可以让我更好地控制窗口的状态,即使是为了任务的目的,它们也是无用的。

那么,在这里做的最好的事情是什么?我应该为班级提供额外的方法还是不应该?

标签: c++classmethods

解决方案


在 c++ 中,您可以使用自由函数解决许多问题,而无需使用可能不需要或仅在某些情况下需要的成员函数污染类。

你可以有这样的功能(也许应该选择更好的命名):

template<typename T>
inline bool toggle_open_state(T &obj) {
  if( obj.is_open() ) {
    obj.close();
  } else {
    obj.open();
  }

  return obj.is_open();
}

这样,您可以将该函数重用于具有成员函数is_openclose和的任何对象open

这种方法可以在 std 库中看到,其中容器仅具有操作容器所需的最少成员函数,其他所有内容都是 egalgorithm标头的一部分。

这些辅助函数可以是单独标头的一部分,并且仅在需要时才包含这些标头。


推荐阅读