0

我为我正在编写的游戏编写了一个非常简单的 Log 类,只是为了在终端中查看一些信息。但是我这样做的方式让我很烦,因为我觉得它效率太低了。每次我记录一些东西时,它的构造函数和析构函数都会被调用。因此,如果我想打印当前帧速率(例如 60fps),cont/desct 每秒调用 60 次(每秒创建和销毁 60 个日志对象)。每次我想记录一些东西并且我不想使用signleton时,我不想在游戏中传递一个日志对象。有没有更好的解决方案。

#include <iostream>
#include <sstream>


class Log
{
public:
    Log() : os()
    {

    }

    ~Log()
    {
        fprintf(stderr, "%s\n", os.str().c_str());
    }

    std::ostringstream &Write()
    {
        os << "from log class: " << 1337 << "\t";

        return os;
    }

private:
    std::ostringstream os;
};

int main(int argc, char *argv[])
{
    Log().Write() << "Hello world " << 45;

    return 0;
}
4

2 回答 2

1

我建议使用一些现有的日志记录框架。人们付出了很多努力来使其尽可能快速和灵活。

以下是对现有日志框架的良好描述:

https://stackoverflow.com/questions/696321/best-logging-framework-for-native-c

于 2012-09-08T16:49:03.677 回答
0

您假设构造函数和析构函数效率低下。根据我的经验,如果它们是在头文件中声明的(就像你的那样)并且如果它们很简单(就像你的那样),那么你可以相信编译器会内联它们并做得很好。对 printf 的调用将占据主导地位。

于 2012-09-08T17:24:43.270 回答