2010-05-07 43 views
5

我想給< <流運算符綁定:的boost ::綁定和<< 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 

我在做什麼錯?

回答

8

相反,你可以嘗試boost.lambda:

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

你的問題的原因是最有可能:你如何在地球上可以期望編譯/綁定知道你正在採取的地址,如果你說&operator<<? (我得到一個不同的錯誤簡單地說,這不是聲明。)


如果你真的想用綁定做到這一點,你必須告訴它你想使用的operator<<,例如,假設INT(您還需要知道,它是運營商作爲成員或免費功能過載):

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

你或許可以使用ostream_iterator代替:

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