2012-01-14 1 views
4

Qt는 그 어떤 "표준 문자열"오브젝트와 함께 라인을 생성하는QDebug 형 구조 : 연산자 '통해 입력의 종료를 결정 <<'

qDebug() << first_qobject << second_qobject; 

같은 호출 좋은 디버그 기능을 갖는다 중요한 부분입니다. \n을 인쇄하고 second_object 다음에 증기를 내뿜습니다.

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) 

내 질문은 지금 : 나는 내 모든 클래스가 내가 부르는 std::string to_string() 방법이 관례에 의해 그 동작을 재현 할 두 번째 *this을 반환 한 후 반환 된 것을 알 수있는 방법이 있나요 객체가 더 이상 호출되지 않습니까? 그러면 std::endl을 인쇄 할 수 있습니까? qDebug()이 그렇게 할 수있을 것 같습니다.

답변

2

솔루션을 발견하고 내 질문도 중복 된 것을 발견 :

짧은에서

How does QDebug() << stuff; add a newline automatically?

, 이것은 소멸자를 구현하고 나는 그것을처럼 일시적인 MyDebug 객체를 생성하여 수행 할 수 있습니다 위의 코드는 qDebug입니다.

MyDebug() << foo << bar; 
// will be destroyed after passing bar, and in the destructor I can now flush.