我现在有以下代码:
#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
是 s 的容器bar
。它的构造函数需要两个迭代器。
bar
我想将输入迭代器限制为仅包含 astd::vector<bar>::iterator
或 a的容器迭代器std::list<bar>::iterator
我如何利用概念来实现这一点?
您可以添加一个
requires
子句来create_foo
:现场演示
你可以结合两个概念:
std::input_iterator
它的value_type
存在bar
:并将其与以下项一起使用
create_foo
:居住