c++ - range-v3 如何操作::使用定界符加入

标签 c++ range-v3 visual-c++-2015

我从 git 获得了 MSVC 的 range-v3。并通过MSVC C++14编译器编译。

考虑代码:

auto getter2 = [](const std::string&r) { return r+r; };
std::vector<std::string> vv = { "11","22", "33" };
std::cout << (vv | view::transform(getter2) | action::join) << std::endl;

它按预期工作。 但是我想添加分隔符加入,如果我写

std::cout << (vv | view::transform(getter2) | action::join(",")) << std::endl;

代码未编译。怎么了? 大量编译器错误如下:

1>d:\sources\ranges_test\ranges_test.cpp(28): error C2672: 'operator __surrogate_func': no matching overloaded function found
1>d:\sources\ranges_test\ranges_test.cpp(28): error C2783: 'unknown-type ranges::v3::action::action<ranges::v3::action::join_fn>::operator ()(Rng &,Rest &&...) const': could not deduce template argument for '__formal'
1>d:\sources\fingrad\dev.fingrad\src\vc\lib\range\v3\action\action.hpp(120): note: see declaration of 'ranges::v3::action::action<ranges::v3::action::join_fn>::operator ()'
1>d:\sources\ranges_test\ranges_test.cpp(28): error C2893: Failed to specialize function template 'unknown-type ranges::v3::action::action<ranges::v3::action::join_fn>::operator ()(T &&,Rest &&...) const'
1>d:\sources\ranges_test\ranges_test.cpp(28): note: With the following template arguments:
1>d:\sources\ranges_test\ranges_test.cpp(28): note: 'T=const char (&)[2]'
1>d:\sources\ranges_test\ranges_test.cpp(28): note: 'Rest={}'
1>d:\sources\ranges_test\ranges_test.cpp(28): note: 'A=ranges::v3::action::join_fn'

更新

不仅 MSVC 端口行为如此,here也是

最佳答案

猜测:字符串文字不是范围。尝试将 std::string(",")view::c_str(",") 传递给 view::join

更新:啊。试试这个(用 clang trunk 测试):

#include <range/v3/all.hpp>
#include <vector>
#include <iostream>
int main()
{
    using namespace ranges;
    std::vector<std::string> vv = { "11","22", "33" };
    auto getter2 = [](auto&r) { return view::concat(r, r); };

    std::cout << (vv | view::transform(getter2) 
                     | view::join(',')
                     | to_<std::string>()) << std::endl;
    return 0;
}

关于c++ - range-v3 如何操作::使用定界符加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383671/

相关文章:

visual-c++ - 如何检测是否安装了 Visual C++ 2017 Redistributable

c++ - MSVC 将仅移动结构参数解释为指针

c++ - Zeromq : How to send message longer than 30 character from python client to c++ server

c++ - 如何编写使用临时容器的范围管道?

c++ - 如何解锁Windows登录屏幕

c++ - 如何隐藏 range-v3 的复杂范围类型?

c++ - 如何使用 range-v3 压缩 vector 的 vector

windows - C++11 std::cout << "string literal in UTF-8"到 Windows cmd 控制台? ( Visual Studio 2015)

c++ - 错误 : invalid conversion from ‘char’ to ‘const char*

c++ - 将 MATLAB 函数编译成可以在没有 MATLAB 的 Linux 终端上运行的东西?