2010-05-07 19 views
5

me gustaría unirse al operador < < corriente:boost :: bind y << operador en C++

for_each(begin, end, boost::bind(&operator<<, stream, _1)); 

Por desgracia, no funciona:

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 

¿Qué estoy haciendo mal?

Respuesta

8

su lugar se podría tratar boost.lambda:

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

La razón de su problema es más probable: ¿cómo demonios se puede esperar que el compilador/unirse para saber lo que está tomando la dirección de si dices &operator<<? (Me da un error diferente, simplemente diciendo que esto no se declara.)


Si realmente desea hacerlo con bind, que tendría que decirle qué operator<< que desea utilizar, por ejemplo, suponiendo int (también deberá saber si el operador está sobrecargado como miembro o como función gratuita):

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

es probable que pueda utilizar en su lugar ostream_iterator:

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