boost :: bind和<< C ++中的运算符

时间:2010-05-07 09:29:55

标签: c++ boost bind

我想绑定<<流运营商:

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

我做错了什么?

2 个答案:

答案 0 :(得分:8)

相反,您可以尝试使用boost.lambda:

//using namespace boost::lambda;
for_each(begin, end, stream << _1));

你问题的原因很可能是:如果你说&operator<<,你怎么能指望编译器/绑定知道你正在拿什么地址? (我得到一个不同的错误只是说没有声明。)


如果你真的想用bind做,你必须告诉它你要使用哪个operator<<,例如假设 int (你还需要知道,操作员作为成员或自由功能超载):

bind(static_cast<std::ostream& (std::ostream::*)(int)>(&std::ostream::operator<<), ref(std::cout), _1)

答案 1 :(得分:5)

您可以改为使用ostream_iterator

vector<int> V;
// ...
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));