tentando juntar intervalos (concat) usando g++14. Existe uma maneira de fazer isso?
#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>();
}
Erro:
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> >')
Se você sabe como agrupar a string unida, você pode usar
std::format
observe que
std::format
usa uma string de formato with{}
para colocar argumentos que seguem a string de formato, portanto, o mais interno{}
será substituído porvv
. Para escapar de uma chave, são usadas chaves duplas, portanto,{{
à}}
esquerda e à direita de{}
. link godbolt do exemplo completo.Para se livrar do verbose
std::sting("...")
, considere usarusing namespace std::literals;
o que permite"..."s
.gostaria que fosse menos detalhado.