나는 내가하고 싶은 것은 나는이처럼 쓸 수있는 곳 스트림 클래스 Debug
쓰기 지금이단락`연산자 <<`C++의 출력
if(debug) {
Output << "f1: " << f1() << "\n";
}
같은 구조를 뿌리고 일부 코드가
Debug << "f1: " << f1() << "\n";
일부 전역 플래그가 설정된 경우 출력이 생성되고, 그렇지 않은 경우 출력이 생성됩니다.
Now : 이것은 Debug
이 출력을 삼키는 /dev/null
으로가는 스트림을 반환함으로써 매우 쉽게 수행 할 수 있습니다. 문제는 f1()
이 여전히 성능에 나쁜 영향을 미칠 수도있는 (심지어 더 비쌀 수도있는 텍스트 표현으로 '렌더링'됨) 여전히 평가된다는 것입니다.
이제 내 질문 : 어떤 출력이 수행되지 않는다는 것을 Debug
가 결정하면 완전히
"f1: " << f1() << "\n"
의 '평가'의 건너 뛰기를 할 수있는 트릭이있다? g()
가 f()
가 false
경우 평가되지 않습니다 C++가 f() && g()
의 경우와 단락 유사
&&
를 사용하는 스트림 클래스를 작성하는 생각이
operator&&
오버로드에 대해 수행되지 않음) 매크로에 악영향을하지 않은 및 구문을 받아 들일 경우
[이 관련 질문] (http://stackoverflow.com/questions/11826554/standard-no-op-output-stream) 오늘부터 해결책을 찾을 수 있습니다. – juanchopanza
@ juanchopanza : 그 질문은 여전히 (아마도) 논증을 평가합니다. 나는 당신이'DEBUGOUT ("f1 :"<< f1() << "\ n");' –
@MooingDuck true와 같은 형식으로 바꾸지 않는 한 질문에 따라 이것을 할 수 있다고 생각하지 않는다. 그들은 단지 스트리밍을 피합니다. – juanchopanza