我正在尝试创建一个ElementIterable可以确定类型是否为嵌套范围的概念。例如,in 中的元素std::vector<int>不可迭代,但std::vector<int>in 中的元素 ( )std::vector<std::vector<int>>是可迭代的。我想到了使用的想法std::iterator_traits<T>,实验代码如下。然而,这个ElementIterable概念并不像预期的行为那样工作。有什么想法可以解决这个ElementIterable概念吗?
template<typename T>
concept ElementIterable = requires(typename std::iterator_traits<T>::value_type x) // requires-expression
{
x.begin(); // must have `x.begin()`
x.end(); // and `x.end()`
};
Run Code Online (Sandbox Code Playgroud)
这个的用法ElementIterable是here。
template<typename T> requires ElementIterable<T>
void Foo(T input);
template<typename T> requires ElementIterable<T>
void Foo(T input)
{
std::cout << "Element iterable" << std::endl;
}
template<typename T>
void Foo(T input);
template<typename T>
void Foo(T input)
{
std::cout << "Element not …Run Code Online (Sandbox Code Playgroud)