Я хочу обернуть потоки C ++ в класс шаблона так, чтобы все операции <<, определенные для потоков, уже были доступны для класса оболочки. </p>
Можно ли изменить следующий код так, чтобы он компилировался безслишком много изменили общее намерение?
#include <iostream>
class Foo
{
private:
std::ostream& os;
public:
explicit Foo( std::ostream& os ) : os( os ) {};
template<class T>
Foo& operator<<( const T& t )
{
os << t << '!';
return *this;
}
};
int main()
{
Foo( std::cout ) << "test" << '\n'; // works fine
Foo( std::cout ) << "test" << std::endl; // compilation error
return 0;
}
Я предположил, что std :: endl имеет некоторый тип и, следовательно, "перехватывается" шаблонным методом.