Почему мой собственный класс выходного потока не работает?

Возможный дубликат:
std :: endl имеет неизвестный тип при перегрузке оператора<<

#include <iostream>

using namespace std;

struct OutputStream
{
template<class T>
OutputStream& operator <<(const T& obj)
{
cout << obj;

return *this;
}
};

OutputStream os;

int main()
{
os << 3.14159 << endl; // Compilation Failure!
}

Компилятор VC ++ 2012 жалуется:

ошибка C2676: двоичная<<‘:’ OutputStream ‘не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора

1

Решение

Причина в том, что компилятор не может определить тип T, так как std::endl шаблон функции, определенный как

template <class charT, class traits>
basic_ostream<charT,traits>& endl ( basic_ostream<charT,traits>& os );

Способ преодолеть это в IOStreams заключается в предоставлении соответствующей перегрузки operator<<:

OutputStream& operator <<(std::ostream& ( *pf )(std::ostream&))
{
cout << pf;
return *this;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]