c++ - 最佳实践: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++ 中,您可以使用自由函数解决许多问题,而无需使用可能不需要或仅在某些情况下需要的成员函数污染类。
你可以有这样的功能(也许应该选择更好的命名):
template<typename T>
inline bool toggle_open_state(T &obj) {
if( obj.is_open() ) {
obj.close();
} else {
obj.open();
}
return obj.is_open();
}
这样,您可以将该函数重用于具有成员函数is_open
、close
和的任何对象open
。
这种方法可以在 std 库中看到,其中容器仅具有操作容器所需的最少成员函数,其他所有内容都是 egalgorithm
标头的一部分。
这些辅助函数可以是单独标头的一部分,并且仅在需要时才包含这些标头。
推荐阅读
- email - 使用 Godaddy、SMTP2Go 和 Netlify 进行电子邮件转发
- python - 您如何使用 python 3 在 tkinter gui 中制作滚动页面,就像在网站上一样?
- javascript - 如何找到多重集的所有分区,其中每个部分都有不同的元素?
- amazon-web-services - 批量处理 AWS Lambda 消息
- haskell - 模式匹配不同的输入相同的输出haskell
- uitableview - 角落后面的 UICollectionCell 和 UITableViewCell 背景颜色
- sql-server - 什么是计算 SQL 中“先前”行的有效方法?
- vue.js - 使用 vue-router 传递隐藏数据
- maven - 在 Markdown for Maven Site (Fluido) 中突出显示语法
- javascript - 无需按钮即可自动调用 javascript 函数