Я хотел бы связать <<потоковый оператор:
for_each(begin, end, boost::bind(&operator<<, stream, _1));
К сожалению, это не работает:
Error 1 error C2780: 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type> boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided c:\source\repository\repository\positions.cpp 90
Что я делаю неправильно?
Вместо этого вы можете попробовать boost.lambda:
//using namespace boost::lambda;
for_each(begin, end, stream << _1));
Причина вашей проблемы, скорее всего, в следующем: как вы можете ожидать, что компилятор / bind узнает, адрес чего вы берете, если вы говорите &operator<<
? (Я получаю другую ошибку, просто говоря, что это не объявлено)
Если вы действительно хотите сделать это с помощью bind, вам придется сказать ему, какой operator<<
вы хотите использовать, например, int (вам также нужно будет знать, перегружен ли оператор как член или свободная функция):
bind(static_cast<std::ostream& (std::ostream::*)(int)>(&std::ostream::operator<<), ref(std::cout), _1)
Вы, вероятно, можете использовать вместо него ostream_iterator :
vector<int> V;
// ...
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));