说我想要一些函数来处理某个文件,我正在考虑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();
什么是首选?
P.S。当我考虑Scott Meyer建议偏爱非会员非朋友功能到会员功能时,我想到了这一点。我已经遇到了一个决定,我有一个函数(通常是一些私有成员函数来帮助类做事),这可以很容易地成为非成员,因为它不在类私有上运行。
但是,该功能仅由该类使用。当然,程序可能会发展到另一个类可能需要它的程度,但我发现很难为这些非成员函数找到一个位置。当你有很多具有通用功能的函数时很容易,但我发现单个非成员函数很难组织到一个特定的地方,并发现将它作为成员保留清洁。关于这个问题的任何提示?
答案 0 :(得分:4)
我倾向于以下简化模式:
但意见不同,最终可能是雇主的指导方针是最终的。
编辑:
......当然不是 简单,但正如你提到Scott Meyers already covered的细节。
至于组织问题:
如果你将辅助函数放在匿名命名空间中,它们已经基本上与类分离了 - 如果你后来决定重用它们,那么在一个公共命名空间中将它们拉出来应该不会太难。
此时,您还应该更好地了解适合的组织,有时可能会提前做好。
答案 1 :(得分:1)
我的主观回答是:在包含静态方法的类上使用命名空间。
我的理由是,通过查看声明,您就会知道这段代码的目的。
如果它是一个类,那么没有什么能阻止它拥有实例方法。如果它是命名空间,那么你知道所有的功能都是独立的。
在学习C#时,这些概念与我同在。在C#中,你不能拥有独立功能。但是,您可以拥有静态类:
internal static class SavedDataHandler
{
// Because this is a static class, the compiler will not let you create an instance method
internal static void ThisIsAStaticFunction() // This is fine
{
}
internal void ThisIsAnInstanceFunction() // Compiler error!
{
}
}
由于C ++没有静态类的概念,因此命名空间就是最佳选择。
答案 2 :(得分:0)
直接包含包含游戏数据的类的save方法,传递表示数据保存到的媒体的辅助对象,并将删除方法放在媒体类本身上是有意义的。
答案 3 :(得分:0)
如果我必须自己回答问题,那就是:没关系。可以说,在这种情况下,函数名称空间和具有静态函数的类之间的区别只是语法。
但是,看起来您正在尝试为“SavedGame”对象建模。有没有理由为什么这些函数应该有一个没有状态的不同处理程序?
答案 4 :(得分:0)
看起来这个问题源于该计划其他部分的一些不健康的设计。我会看看你传递给处理程序的这些arg1和arg2的设计,它们可能是缺少抽象的地方。