gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:14 25 4
gpt4 key购买 nike

假设我想要一些函数来处理一些文件,我正在考虑 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com