C++ 让函数返回字符串而不是int是否不好?(C+;+;)
我对编程还是比较陌生的。我正在用SDL做一个游戏,我发现自己在想我在哪里使用了坏习惯 例如,我有一个名为titleScreen()的函数,其中用户决定进入游戏的哪种模式 我可以从0-3返回一个值,然后通过if/else/else/else语句处理该值,以确定他们选择的模式 或 我可以返回一个字符串,比如“STORYMODE”、“FREEPLAY”、“TUTORIAL”或“QUIT”,并用它来决定哪种模式 我喜欢第二种模式,因为它消除了试图找出选择了哪种模式时的最初困惑,但我有一种感觉,我觉得这样做有问题C++ 让函数返回字符串而不是int是否不好?(C+;+;),c++,string,function,int,return,C++,String,Function,Int,Return,我对编程还是比较陌生的。我正在用SDL做一个游戏,我发现自己在想我在哪里使用了坏习惯 例如,我有一个名为titleScreen()的函数,其中用户决定进入游戏的哪种模式 我可以从0-3返回一个值,然后通过if/else/else/else语句处理该值,以确定他们选择的模式 或 我可以返回一个字符串,比如“STORYMODE”、“FREEPLAY”、“TUTORIAL”或“QUIT”,并用它来决定哪种模式 我喜欢第二种模式,因为它消除了试图找出选择了哪种模式时的最初困惑,但我有一种感觉,我觉得这样
在我的情况下,返回值的最佳方式是什么?在这种情况下,您应该使用
enum
列出所有状态,以实现可读性而不影响性能。
例如:
enum mode {
STORYMODE,
FREEPLAY,
TUTORIAL,
QUIT
}
您应该为此使用枚举,它实际上是int,但更具可读性。 因此,我将创建:
enum GameMode { STORYMODE, FREEPLAY, TUTORIAL, QUIT };
并具有方法返回类型GameMode
编辑2:
若每个游戏模式都有按钮,只需在单击按钮时返回enum或调用带有enum参数的其他方法即可。与现在使用字符串的方式相同。返回游戏对象的共享指针如何?下面是一些伪代码,可以让您开始使用,任何调用
titleScreen
的操作都应该调用返回对象上的operator()
class GameI {
public:
virtual ~GameI() {};
void operator() = 0;
}
typedef std::shared_ptr<GameI> SharedGame;
class GameStory {
public:
void operator();
}
void GameStory::operator()
{
...
}
SharedGame titleScreen()
{
...
return SharedGame(new GameStory());
}
class GameI{
公众:
虚拟~GameI(){};
void运算符()=0;
}
typedef std::shared_ptr SharedGame;
班级游戏故事{
公众:
void运算符();
}
void GameStory::operator()
{
...
}
SharedName标题屏幕()
{
...
返回SharedName(新游戏故事());
}
这不仅仅是性能上的成功——它还(至少在装饰上)为您的一组可能值提供了一种类型。在C++11中,它实际上是强类型的。那么,我应该把枚举的声明放在哪里呢?在调用函数之前是否在main中?或者那个枚举被认为是它自己的函数吗?啊,我对你的问题还不太了解。所以你们在控制台中输入了这些值?谢谢你们的回复,也谢谢你们的支持。我正在做一个SDL应用程序,所以我有main.cpp、function.h和function.cpp作为我的文件。我的主函数调用init()、loadFiles(),然后应该调用titlescreen()。Titlescreen()应返回枚举值,但我不确定是否要在main、Titlescreen()函数中或在function.h和function.cpp文件中写入该枚举行。我很抱歉,我对所有这些都很陌生,当我在通过书本学习的时候,我忍不住要尝试去实现我没有准备好的目标。我编辑了我的答案,所以你可以看看这是否解决了你的问题。对不起,我忘了提到它不是控制台。用户实际上有一个800x600应用程序窗口,其中包含图像和按钮。用户用鼠标点击一个按钮(这部分有效),点击应该返回gamemode值。