0

这个可以吗?我基本上通过封装所有游戏实体和逻辑的类替换了对引用全局变量的单个函数的调用,以下是我想如何在 main 中调用新类,只是想知道对此的一般 c++ 大师共识是什么。

class thingy
{
public:
    thingy()
    {
        loop();
    }
    void loop()
    {
        while(true)
        {
            //do stuff

            //if (something)
                //break out
        }
    }
};

int main (int argc, char * const argv[]) 
{
    thingy();
    return 0;
}
4

2 回答 2

9

包含 game/events/... 循环的构造函数并不常见,执行此类操作的常用方法是使用构造函数设置对象,然后提供一个单独的方法来开始冗长的阐述。

像这样的东西:

class thingy
{
public:
    thingy()
    {
        // setup the class in a coherent state
    }

    void loop()
    {
        // ...
    }
};

int main (int argc, char * const argv[]) 
{
    thingy theThingy;
    // the main has the opportunity to do something else
    // between the instantiation and the loop
    ...
    theThingy.loop();
    return 0;
}

实际上,几乎所有的 GUI 框架都提供了一个行为类似的“应用程序”对象。以 Qt 框架为例:

int main(...)
{
    QApplication app(...);
    // ... perform other initialization tasks ...
    return app.exec(); // starts the event loop, typically returns only at the end of the execution
}
于 2012-05-08T21:34:16.793 回答
7

我不是 C++ 大师,但我可能会这样做:

struct thingy
{
    thingy()
    {
        // set up resources etc
    }

    ~thingy()
    {
        // free up resources
    }

    void loop()
    {
        // do the work here
    }
};

int main(int argc, char *argv[])
{
    thingy thing;
    thing.loop();
    return 0;
}

构造函数用于构造对象,而不是用于处理整个应用程序的逻辑。同样,如果需要,您在构造函数中获取的任何资源都应在析构函数中适当处理。

于 2012-05-08T21:37:22.593 回答