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

Ano*_*ous 6 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
...
Run Code Online (Sandbox Code Playgroud)

2)创建函数命名空间

namespace SavedDataHandler {
  SaveData( ... ) { ... }
  DeleteSave( ... ) { ... }
  ...
}
Run Code Online (Sandbox Code Playgroud)

用户会打电话给

SavedDataHandler::SaveData( arg1, arg 2 );
SavedDataHandler::DeleteSave();
Run Code Online (Sandbox Code Playgroud)

什么是首选?

PS当我考虑Scott Meyer建议偏爱非会员非朋友功能到会员功能时,我想到了这一点.我已经遇到了一个决定,我有一个函数(通常是一些私有成员函数来帮助类做事),这可以很容易地成为非成员,因为它不在类私有上运行.

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

Geo*_*che 4

我倾向于以下简化模式:

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

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

编辑:

...当然没那么简单,但正如你提到的,斯科特·迈耶斯已经涵盖了细节。

至于组织问题:
如果您将辅助函数放在匿名名称空间中,它们基本上已经与类解耦了 - 如果您稍后决定重用它们,那么将它们拉到公共名称空间中应该不会太难。
此时,您还应该对适合的组织有更好的了解,这有时可能很难提前实现。