用 std 实现替换 boost

Replacing boost with std implementation

提问人:SPlatten 提问时间:9/7/2020 最后编辑:QuentinSPlatten 更新时间:9/7/2020 访问量:383

问:

替换它的正确方法是什么:

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

使用不使用 boost 的实现?这是我尝试过的:

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)
C++ C++11 加速 标准

评论


答:

7赞 Quentin 9/7/2020 #1

boost::lambda是一个奇妙的怪物,那种将lambdas向后移植到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;

评论

0赞 SPlatten 9/7/2020
尝试了第一个建议,得到:错误 C3533:“const auto &”:参数不能具有包含“auto”的类型
0赞 Miles Budnek 9/7/2020
@SPlatten 在 C++14 之前,lambda 还不是一回事。只需使用存储在其中的任何内容的具体类型即可。autobd
0赞 m88 9/7/2020
typename decltype(bd)::const_reference v