2013-12-04 3 views
0

В настоящее время я пытаюсь фильтровать входные потоки в потоковый буффер. Поэтому я хотел создать класс «MyClog», который перегружает его < < и фильтрует входной поток, переданный ему, перед пересылкой отфильтрованного ввода в буферный буфер.Как фильтровать входные потоки для блокировки

Фильтрация зависит от внутреннего состояния класса MyClog. Также я хочу перегрузить оператора с помощью шаблона, поэтому мне просто нужно реализовать один метод.

пример

clog << "This is a Test No." << 1; 

myclog << "This is a Test No." << 2 

В зависимости от внутреннего состояния myclog сообщение печатается через помеху.

Мой перегруженный оператор работает, если я не использую шаблон, что я делаю неправильно? И в чем разница между template<typename T> и template<class T>?

Вот отрывок из моего кода.

template<typename T> 
class MyClog { 

private: 
bool state=false; 

public: 
MyClog& operator<<(const T& arg){ 
    if(state){ 
     clog << arg; 
    } 
    return *this; 
} 
+0

Похож http://stackoverflow.com/q/6677072/560648? –

ответ

0

template<typename T> предпочтительнее template<class T>, но они эквивалентны.

Вы шаблонирование всего класса, когда вам нужно только один шаблон функции - это должно работать:

class MyClog { 

private: 
bool state=false; 

public: 

template<typename T> 
MyClog& operator<<(const T& arg){ 
    if(state){ 
     clog << arg; 
    } 
    return *this; 
} 
Смежные вопросы