让函数返回字符串而不是整数是否很糟糕? (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++)的主要内容,如果未能解决你的问题,请参考以下文章

如何整数除以负数*向下*?

这种使用 C++ 异常是不是合理

何时使用 trunc() 而不是 int() 将浮点类型数转换为整数更好?

C++中判断两个字符串是不是相等,怎么判断

在 C++ 中的函数内继续而不是返回

在C ++中,是否有任何理由产生并立即加入一个线程,而不是直接调用该函数?