提问人:SPlatten 提问时间:9/7/2020 最后编辑:QuentinSPlatten 更新时间:9/7/2020 访问量:383
用 std 实现替换 boost
Replacing boost with std implementation
问:
替换它的正确方法是什么:
std::ostringstream buf;
std::for_each(bd.begin(), bd.end(), buf << boost::lambda::constant(" ") << 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)
答:
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 << " " << v; });
...甚至:
std::ostringstream buf;
for(auto const &v : bd)
buf << " " << v;
评论
0赞
SPlatten
9/7/2020
尝试了第一个建议,得到:错误 C3533:“const auto &”:参数不能具有包含“auto”的类型
0赞
Miles Budnek
9/7/2020
@SPlatten 在 C++14 之前,lambda 还不是一回事。只需使用存储在其中的任何内容的具体类型即可。auto
bd
0赞
m88
9/7/2020
或typename decltype(bd)::const_reference v
评论