c++ - 我应该使用一类函数还是函数的命名空间?

标签 c++

假设我想要一些函数来处理一些文件,我正在考虑 2 个选项。

1) 创建一个类似 SavedDataHandler 的类,用户可以像这样使用....

// Note that SavedDataHandler has no members. It just has functions that operate on a
// resource ( the file)
SavedDataHandler gameSave;
gameSave.SaveData( arg1, arg2 ); // to save data
gameSave.DeleteSave(); // Delete the save
...

2) 创建函数的命名空间

namespace SavedDataHandler {
  SaveData( ... ) { ... }
  DeleteSave( ... ) { ... }
  ...
}

用户会这样调用

SavedDataHandler::SaveData( arg1, arg 2 );
SavedDataHandler::DeleteSave();

什么是首选?

附言当我在考虑 Scott Meyer 关于更喜欢非成员非友元函数而不是成员函数的建议时,我想到了这一点。我遇到过我有一个函数(通常是一些私有(private)成员函数来帮助类做事)的决定,因为它不对类私有(private)进行操作,所以很容易变成非成员。

但是,该函数仅供该类使用。当然,程序可能会发展到另一个类可能需要它的地步,但我发现很难找到这些非成员函数的位置。当你有很多具有通用目的的函数时,这很容易,但我发现很难将单个非成员函数组织到一个特定的地方,并且发现将其保留为成员可以保持整洁。有关此问题的任何提示?

最佳答案

我倾向于以下简化模式:

  • 如果它只被一个类使用并且可能保持这种状态,请将它放在匿名命名空间的实现文件中。
  • 如果它用于多个类并且不需要访问类的内部状态,请将它放在命名空间中。
  • 如果它需要访问类的内部状态,当然要让它成为一个成员函数。

但是意见不一,最终可能您雇主的指导方针是最终的指导方针。

编辑:

...当然不是那么简单,但正如您提到的 Scott Meyers already covered细节。

至于组织问题:
如果您将辅助函数放在匿名命名空间中,它们大部分已经与类分离 - 如果您稍后决定重用它们,将它们拉出到一个公共(public)命名空间中应该不会太难。
在这一点上,您还应该对合适的组织有更好的看法,这有时很难提前。

关于c++ - 我应该使用一类函数还是函数的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083721/

相关文章:

c++在fork之后初始化全局对象

C++ 从字符串调用方法

c++ - Qt 没有用于 QProcess::finished() 信号的插槽

c++ - 如何从用户空间设置hostapd的 "channel"和 "hw_mode"(c++应用程序)

c++ - 是否可以为 ARM 和 THUMB 生成单独的 .exe 文件?

C++迭代器,使用set find方法后是否需要重新设置

c++ - 类的对象(使用单/多继承)有多少个 vptr?

c++ - 访问对象的变量减慢程序 (C++)

c++ - 将类型序列与 iostream 混合的最简单方法?

c++ - 为了让 QtSql 正常运行,我需要哪些 .dll 文件?