gnzlbg的SO问题boost :: range :: join中的解决方案部分意味着它可以在一个客户端代码调用中将多个范围连接到调用和的自定义函数可变参数模板.根据该问题,答案和评论,先前可以加入2个范围,后者需要确保使用先前的非过载.第二个之后的任何容器都应该是完美转发的.但我的客户端代码只能使用最多3个参数成功调用它.还有更多的东西无法编译.怎么了?怎么解决?现在是否有任何Boost实体加入了许多范围?boost::joinboost::make_iterator_rangeconststd::forward
我复制并粘贴了OP的实现,只在这里编辑它以获取空白可读性并添加相关的标题:
#include <utility>
#include <boost/range/join.hpp>
template<class C>
auto join(C&& c)
-> decltype(boost::make_iterator_range(std::begin(c), std::end(c)))
{
return boost::make_iterator_range(std::begin(c), std::end(c));
}
template<class C, class D, class... Args>
auto join(C&& c, D&& d, Args&&... args)
-> decltype
(
boost::join
(
boost::join
(
boost::make_iterator_range(std::begin(c), std::end(c)),
boost::make_iterator_range(std::begin(d), std::end(d))
),
join(std::forward<Args>(args)...)
)
)
{
return boost::join
(
boost::join
(
boost::make_iterator_range(std::begin(c), std::end(c)),
boost::make_iterator_range(std::begin(d), std::end(d))
),
join(std::forward<Args>(args)...)
);
}
Run Code Online (Sandbox Code Playgroud)
并添加了我的客户端代码:
#include <deque>
#include …Run Code Online (Sandbox Code Playgroud)