我为一个游戏写了一个非常简单的日志类,我写这个游戏只是为了在终端上看到一些信息。但我的做法让我很困扰,因为我觉得效率太低了。每次我记录某件事时,都会调用它的构造函数和析构函数。因此,如果我想打印当前帧速率(例如60 log ),cont/cont将被每秒调用60次(每秒创建和销毁60个日志对象)。我不想每次都要在游戏中传递一个日志对象,我也不想使用路标。有没有更好的解决办法。
#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;
}发布于 2012-09-08 16:49:03
我建议使用一些现有的日志记录框架。人们付出了很大的努力,使它尽可能快和灵活。
以下是对现有日志记录框架的良好描述:
https://stackoverflow.com/questions/696321/best-logging-framework-for-native-c
发布于 2012-09-08 17:24:43
您正在假设构造函数和析构函数效率低下。根据我的经验,如果它们是在头文件中声明的(就像您的一样),如果它们是简单的(就像您的那样),那么您可以相信编译器会将它们内联并做得非常好。对printf的呼吁将占据主导地位。
https://stackoverflow.com/questions/12332522
复制相似问题