Как правильно заменить это:

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

С реализацией, в которой не используется ускорение? Вот что я пробовал:

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

Второй знак «<<» подчеркнут красным, и я получаю сообщение об ошибке:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::_Ph<1>' (or there is no acceptable conversion)
4
SPlatten 7 Сен 2020 в 11:38

1 ответ

Лучший ответ

boost::lambda - это изумительное чудовище, которое портировало лямбды в C ++ 03. Эквивалент вашего кода:

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

... или даже:

std::ostringstream buf;
for(auto const &v : bd)
    buf << "&nbsp;" << v;
7
Evg 7 Сен 2020 в 08:50