I would like to bind the << stream operator:
for_each(begin, end, boost::bind(&operator<<, stream, _1));
Unfortunately it does not work:
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
What am I doing wrong ?
boost::bind is a generalization of the standard functions std::bind1st and std::bind2nd. It supports arbitrary function objects, functions, function pointers, and member function pointers, and is able to bind any argument to a specific value or route input arguments into arbitrary positions.
std::bind. The function template bind generates a forwarding call wrapper for f . Calling this wrapper is equivalent to invoking f with some of its arguments bound to args .
Bind function with the help of placeholders helps to manipulate the position and number of values to be used by the function and modifies the function according to the desired output.
_1 is a placeholder. Boost. Bind defines placeholders from _1 to _9 . These placeholders tell boost::bind() to return a function object that expects as many parameters as the placeholder with the greatest number.
Instead you might try boost.lambda:
//using namespace boost::lambda;
for_each(begin, end, stream << _1));
The reason of your problem is most probably: how on earth can you expect the compiler / bind to know what you are taking the address of if you say &operator<<
? (I get a different error simply saying that this is not declared.)
If you really want to do it with bind, you'd have to tell it which operator<<
you want to use, e.g assuming int (you'll also need to know, it the operator is overloaded as a member or free function):
bind(static_cast<std::ostream& (std::ostream::*)(int)>(&std::ostream::operator<<), ref(std::cout), _1)
You can probably use ostream_iterator instead:
vector<int> V;
// ...
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With