повышение:: свяжите и <<оператор в C++

Я хотел бы связать <<потоковый оператор:

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

Что я делаю неправильно?

5
задан Arthur 7 May 2010 в 09:29
поделиться

2 ответа

Вместо этого вы можете попробовать 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)
8
ответ дан 18 December 2019 в 14:43
поделиться

Вы, вероятно, можете использовать вместо него ostream_iterator :

vector<int> V;
// ...
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));
5
ответ дан 18 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: