这个问题的标题取自 Scott Meyers 在 Effective C++ 3rd Edition 中第 23 项的标题。他使用以下代码:
class WebBrowser {
public:
void clearCache();
void clearHistory();
void removeCookies();
//This is the function in question.
void clearEverything();
};
//Alternative non-member implementation of clearEverything() member function.
void clearBrowser(WebBrowser& wb) {
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
};
虽然声明下面的替代非成员非友元函数比成员函数 clearEverything() 更适合封装。我想部分想法是,如果提供访问的成员函数较少,则访问 WebBrowser 的内部成员数据的方法也较少。
如果你接受这一点并制作这种外部非友元函数,你会把它们放在哪里?这些函数仍然与类紧密耦合,但它们将不再是类的一部分。将它们放在类(class)的同一个 CPP 文件、库中的另一个文件或其他文件中是好习惯吗?
我主要来自 C# 背景,我从来没有摆脱过对所有东西都成为类一部分的渴望,所以这让我有点困惑(虽然这听起来很愚蠢)。
最佳答案
通常,您会将它们放在关联的命名空间中。这与 C# 中的扩展方法具有(某种程度上)相同的功能。
问题是,在 C# 中,如果你想创建一些静态函数,它们必须在一个类中,这很荒谬,因为根本没有 OO 进行 - 例如,Math 类。在 C++ 中,您可以只使用正确的工具来完成这项工作——命名空间。
关于c++ - 将非成员非友元函数优先于成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507026/