C++ range-v3:使用测力仪连接管道范围

C++ range-v3:使用测力仪连接管道范围,c++,range-v3,C++,Range V3,我正在尝试构建range-v3库的一个基本演示:获取一些整数,过滤掉奇数值,对它们进行字符串化,然后将它们合并到一个逗号分隔的列表中。例如,{8,6,7,5,3,0,9}变为“8,6,0”。通过阅读和浏览示例,似乎天真的解决方案类似于: 字符串演示(const vector&v) { 返回v| ranges::view::filter([](int i){返回i%2==0;})| ranges::view::transform([](int i){返回到_字符串(i);})| 范围::视图::连

我正在尝试构建range-v3库的一个基本演示:获取一些整数,过滤掉奇数值,对它们进行字符串化,然后将它们合并到一个逗号分隔的列表中。例如,
{8,6,7,5,3,0,9}
变为
“8,6,0”
。通过阅读和浏览示例,似乎天真的解决方案类似于:

字符串演示(const vector&v)
{
返回v|
ranges::view::filter([](int i){返回i%2==0;})|
ranges::view::transform([](int i){返回到_字符串(i);})|
范围::视图::连接(“,”);
}
但基于Clang7的构建失败了,静态断言是“无法查看临时容器”。由于我正在将结果收集到一个字符串中,因此可以使用渴望的版本-
action::join
,而不是:

字符串演示(const vector&v)
{
返回v|
ranges::view::filter([](int i){返回i%2==0;})|
ranges::view::transform([](int i){返回到_字符串(i);})|
范围::动作::连接;
}
但急切版本似乎没有使用分隔符的重载

有趣的是,如果首先将
的输入收集到容器中,原始断言就会消失。以下代码可以正常编译和运行:

字符串演示(const vector&v)
{
向量字符串=v|
ranges::view::filter([](int i){返回i%2==0;})|
ranges::view::transform([](int i){返回到_字符串(i);});
返回字符串| ranges::view::join(“,”);
}
但这完全违背了懒惰评估的原则,而懒惰评估驱动着图书馆的大部分内容


为什么第一个例子失败了?如果不可行,可以给
action::join
一个分隔符吗?

action::join
应该接受一个分隔符。请随时提交功能请求。动作需要很多爱。

乍一看,这个问题很相似,但似乎有不同的问题在起作用<代码>范围::to
无法解决此问题。为什么不返回自动而不是字符串?这将允许您在这样一个演示之外真正懒散,但这只会使静态断言发生在其他地方。最终,您希望将结果收集到一个字符串中(用于I/O或另一个结构中的存储),并在那里触发。我们在哪里提交功能请求?