让函数返回字符串而不是整数是否很糟糕? (C++)
Posted
技术标签:
【中文标题】让函数返回字符串而不是整数是否很糟糕? (C++)【英文标题】:Is it bad to have functions return strings instead of ints? (C++)让函数返回字符串而不是整数是不是很糟糕? (C++) 【发布时间】:2013-04-13 14:43:18 【问题描述】:我对编程还是比较陌生。我正在使用 SDL 开发一款游戏,我发现自己想知道我在哪里使用了坏习惯。
例如,我有一个名为 titleScreen() 的函数,用户可以在其中决定进入哪种游戏模式。
我可以返回一个 0-3 的值,然后通过 if/else/else/else 语句对其进行处理,以决定他们选择的模式。
或
我可以返回一个字符串,例如“STORYMODE”、“FREEPLAY”、“TUTORIAL”或“QUIT”,并使用它来决定哪种模式。
我喜欢第二种模式,因为它消除了在试图弄清楚选择了哪种模式时的最初困惑,但我有一种感觉,这样做会有问题。
在我的情况下,返回值的最佳方式是什么?
【问题讨论】:
【参考方案1】:在这种情况下,您应该使用enum
列出所有状态以在不影响性能的情况下实现可读性。
例如:
enum mode
STORYMODE,
FREEPLAY,
TUTORIAL,
QUIT
【讨论】:
这不仅仅是对性能的影响——它还(至少在外观上)为您的一组可能值提供了一个类型。在 C++11 中,它实际上是强类型的。【参考方案2】:您应该为此使用枚举,这实际上是 int 但更具可读性。 所以我会创建:
enum GameMode STORYMODE, FREEPLAY, TUTORIAL, QUIT ;
并且有方法返回类型 GameMode。
编辑 2:
如果每个游戏模式都有按钮,则只需在单击按钮时返回枚举或使用枚举参数调用其他方法。与您现在使用字符串的方式相同。
【讨论】:
那么我应该把枚举的声明放在哪里呢?在 main 函数被调用之前?还是那个枚举被认为是它自己的函数? 啊,我没听懂你的问题。所以你有这些值作为控制台的输入? 感谢您的回复,感谢您对我的包容。我正在做一个 SDL 应用程序,所以我有 main.cpp、function.h 和 function.cpp 作为我的文件。我的主函数调用init()、loadFiles(),然后应该调用titlescreen()。 Titlescreen() 应该返回枚举值,但我不确定是否要在 main、titlescreen() 函数中编写该枚举行,或者在 function.h 和 function.cpp 文件中编写它自己的行.很抱歉,我对这一切都很陌生,当我在书本上学习时,我忍不住尝试解决我没有准备好的目标。 我编辑了我的答案,所以你可以看看是否能解决你的问题。 对不起,我忘了说它不是控制台。用户实际上有一个带有图像和按钮的 800x600 应用程序窗口。用户用鼠标点击一个按钮(这部分有效),点击应该返回游戏模式值。【参考方案3】:如果返回一个指向游戏对象的共享指针呢?下面是一些让您入门的伪代码,无论调用 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());
【讨论】:
以上是关于让函数返回字符串而不是整数是否很糟糕? (C++)的主要内容,如果未能解决你的问题,请参考以下文章