2016-06-06 2 views
-1

Я хотел бы иметь функцию, которая действует как cout, но с некоторыми опциями.Настройка cout из класса с опциями

Например: MyFunc(0) << "Cats like to drink milk " << 2 << endl; , когда его 0, не должно быть какой-либо вывод

Когда его так:

MyFunc(1) << "Cats like to drink milk " << 2 << endl; 

Я должен увидеть выход "Кошки любят пить milk2". Я читал из нескольких форумов, что 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/ж/CPP/И.О./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 в.

Смежные вопросы