NullStream은 디버그 문을 제거하는 빠른 것을 찾고 있다면 좋은 해결책이 될 수 있습니다. 내가 디버깅을 위해 자신의 클래스를 만드는 것이 좋습니다 그러나 더 디버그 기능이 필요한 경우, 그 필요에 따라 확장 할 수 있습니다 :
class MyDebug
{
std::ostream & stream;
public:
MyDebug(std::ostream & s) : stream(s) {}
#ifdef NDEBUG
template<typename T>
MyDebug & operator<<(T& item)
{
stream << item;
return *this;
}
#else
template<typename T>
MyDebug & operator<<(T&)
{
return *this;
}
#endif
};
이것은 당신이 처음에 원하는 것을 할 수있는 간단한 설정하고, 플러스는 혜택을 추가했다 .. 당신은 디버그 수준 등으로 기능을 추가시키는의
는
업데이트 : 당신은뿐만 아니라 (ENDL) 조종을받을 것인지는 매니퓰레이터가 함수로 구현되어 이제 때문에, 당신은 추가 할 수 있습니다 :
MyDebug & operator<<(std::ostream & (*pf)(std::ostream&))
{
stream << pf;
return *this;
}
그리고 모든 조작 유형 (모든 조작 유형에 대한 과부하 할 필요가 없습니다 그래서) : 그 또한 일반 함수 포인터를 받아 들일 것입니다 때문에
template<typename R, typename P>
MyDebug & operator<<(R & (*pf)(P &))
{
stream << pf;
return *this;
}
,이 마지막으로주의해야합니다.
이 스트림에 endl을 전달하면 오류가 발생합니다. T & item은 endl을 허용하지 않습니다. 어떤 단서로도이 오버로드를 수행 할 수 있습니까? –
조작원에 대한 답변이 업데이트되었습니다. –
고맙습니다. –