No momento tenho o seguinte código:
#include <iterator>
#include <vector>
struct bar{};
struct details {};
struct foo {
details det;
std::vector<bar> data;
};
template <std::input_iterator Iter>
foo create_foo(const details& details, Iter begin, Iter end) {
return foo {
.det = details,
.data = {begin, end}
};
}
int main() {
std::vector<bar> bars = {bar{},bar{},bar{}};
create_foo({}, bars.begin(), bars.end());
return 0;
}
foo::data
é um Container para bar
s. Seu construtor recebe dois Iteradores.
Quero restringir os iteradores de entrada para serem iteradores de contêineres contendo bar
apenas, por exemplo, um std::vector<bar>::iterator
ou umstd::list<bar>::iterator
Como eu conseguiria isso com conceitos?
Você pode adicionar uma
requires
cláusula paracreate_foo
:Demonstração ao vivo
você pode combinar dois conceitos:
std::input_iterator
e seuvalue_type
serbar
:E use-o com
create_foo
:AO VIVO