0

端末で情報を確認するためだけに書いているゲーム用の非常に単純な Log クラスを作成しました。しかし、私がそれをした方法は、あまりにも非効率的だと感じているので、私を悩ませています. 何かをログに記録するたびに、そのコンストラクタとデストラクタが呼び出されます。そのため、現在のフレーム レート (例: 60fps) を印刷したい場合、cont/desct は 1 秒間に 60 回呼び出されます (1 秒間に 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;
}
4

2 に答える 2

0

コンストラクタとデストラクタが非効率的であると仮定しています。私の経験では、それらがヘッダーファイルで宣言されている場合 (あなたのもののように)、それらが単純である場合 (あなたのもののように)、コンパイラを信頼してそれらをインライン化し、非常に良い仕事をすることができます。printf の呼び出しが時間の大半を占めます。

于 2012-09-08T17:24:43.270 に答える