尝试使用 g++14 连接(连接)范围。有办法做到这一点吗?
#include <ranges>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main(){
const vector<string> v = {"1","2","3"};
const auto vv = {
"{",
v | views::join_with(','),
"}"
};
const string buf = vv | views::join | ranges::to<string>();
}
错误:
prog.cc: In function 'int main()':
prog.cc:15:5: error: unable to deduce 'const std::initializer_list<auto>' from '{"{", std::ranges::views::__adaptor::operator|<_Partial<std::ranges::views::_JoinWith, char>, const std::vector<std::__cxx11::basic_string<char> >&>(v, ((const std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::_JoinWith>*)(& std::ranges::views::join_with))->std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::_JoinWith>::operator()<char>(',')), "}"}'
15 | };
| ^
prog.cc:15:5: note: deduced conflicting types for parameter 'auto' ('const char*' and 'std::ranges::join_with_view<std::ranges::ref_view<const std::vector<std::__cxx11::basic_string<char> > >, std::ranges::single_view<char> >')
比我希望的更详细。
#include <ranges>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main(){
const vector<string> v = {"1","2","3"};
const auto vv = {
string("{"),
v | views::join_with(',') | ranges::to<string>(),
string("}")
};
const string buf = vv | views::join | ranges::to<string>();
}