2016-06-06 8 views
-1

나는 cout과 같은 역할을하지만 몇 가지 옵션이있는 기능을 원합니다.옵션이있는 클래스에서 cout 사용자 정의

예 : MyFunc(0) << "Cats like to drink milk " << 2 << endl; 의 0, 모든 출력을가하지 말아야 할 때

의이 같은 : I 출력을 볼 수
MyFunc(1) << "Cats like to drink milk " << 2 << endl; 

는 "고양이 베이글 반쪽을 마시고 싶어." ostream을 사용해야한다는 몇 가지 포럼을 읽었지 만, 어떻게 내 용도로 사용할 수 있는지 확신 할 수 없습니다. MyFunc는 기본적으로 생성자에 대해 1,0 옵션을 갖는 클래스입니다.

나는 이런 것들을 보았지만 그것이 어떻게 작동하는지 알지 못합니다.

Log& operator<< (std::ostream &(*f)(std::ostream &)){ 
cout << *f; 
return *this; 
} 

도움을 주시면 감사하겠습니다.

+0

이 문제의 더 단순한 부분을 해결 했습니까? 숫자에 대해 특별히 신경 쓰지 않고'cout'처럼 행동하는 클래스를 작성하는 것과 같은가? – Beta

+0

글쎄, 당신은 일반적으로 표준 네임 스페이스의 객체를 상속하지 말아야한다. 그러나 나는'std :: cout'을 래핑하고 모든 [같은 유형] (http : // en)에 대해'<<'연산자를 구현할 것으로 예상 할 수있다. .cppreference.com/w/cpp/io/basic_ostream/operator_ltlt). [이] (http://coliru.stacked-crooked.com/a/4970cbea5b144ec7)와 같은 것 – AndyG

+0

@AndyG, 고맙습니다. 내가 정확히 무엇을 찾고 있었습니까! – user42826

답변

0

그것은 기본적으로 다음과 같이 진행됩니다

class CoutPlus { 
public: 
    CoutPlus(int& i) : m_bOn(i) {} 
    template<class T> CoutPlus& operator<<(const T& val) { 
     if (m_bOn) 
      std::cout << val; 
     return *this; 
    } 
private: 
    bool m_bOn; 
}; 

당신은 빈 생성자와 할당에 무엇을, 그리고 다른 ostream에의 멤버 함수를 구현할지 여부를 결정합니다.