Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replacing boost with std implementation

Tags:

c++

std

c++11

boost

What is the correct way to replace this:

std::ostringstream buf;
std::for_each(bd.begin(), bd.end(), buf << boost::lambda::constant("&nbsp;") << boost::lambda::_1);

With an implementation that doesn't use boost? This is what I've tried:

std::string backspace("&nbps;");
std::ostringstream buf;        
std::for_each(bd.begin(), bd.end(), buf << backspace << std::placeholders::_1);

The second '<<' is underlined in red and I get the error message:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::_Ph<1>' (or there is no acceptable conversion)
like image 534
SPlatten Avatar asked Mar 03 '23 02:03

SPlatten


1 Answers

boost::lambda is a marvellous monstrosity that kind of backported lambdas to C++03. The equivalent to your code is:

std::ostringstream buf;
std::for_each(bd.begin(), bd.end(), [&](auto const &v) { buf << "&nbsp;" << v; });

... or even:

std::ostringstream buf;
for(auto const &v : bd)
    buf << "&nbsp;" << v;
like image 97
Quentin Avatar answered Mar 12 '23 10:03

Quentin