4

Qtには、そのように呼び出される優れたデバッグ機能があります

qDebug() << first_qobject << second_qobject;

オブジェクトの「標準to-string」を含む行を生成し、-そしてそれが重要な部分です-を出力し、\n後に蒸気をフラッシュしsecond_objectます。std::string to_string()すべてのクラスに私が呼び出すメソッドがあるという規則によって、その動作を再現したいと思います。

struct myDebug{
   template<typename T>
   myDebug& operator<<(T t){
       std::cout << t.to_string() << " "; // space-separated
       return *this;
   }
};

struct Point{
    std::string to_string(){ return "42"; }
};

myDebug() << Point() << Point(); // should produce "42 42" plus a newline (which it doesn't)

私の質問は次のとおりです*this。2回目に戻った後、返されたオブジェクトが呼び出されなくなったことを確認する方法はありますか? std::endl?を印刷できるように qDebug()それができるようです。

4

1 に答える 1

2

解決策を見つけて、私の質問も重複していることがわかりました:

どのように QDebug() << スタッフ; 自動的に改行を追加しますか?

要するに、これはデストラクタを実装することで実行でき、MyDebug上記のコードで行ったように一時オブジェクトを作成するだけで実行できますqDebug

MyDebug() << foo << bar;
// will be destroyed after passing bar, and in the destructor I can now flush.
于 2012-01-14T10:31:09.543 に答える