【发布时间】:2021-12-16 16:38:48
【问题描述】:
假设我有一些模板函数,它返回传递给它的一些可迭代对象的中值。
类似:
template<typename T>
decltype(auto) find_median_sorted(T begin)
{
// some code here
}
现在我想确保我将 T 限制为始终可迭代。我正在尝试学习如何在 C++ 中使用concepts,那么有什么方法可以在这里使用concept 来确保T 是可迭代的吗?
我确信还有其他方法可以检查它是否是可迭代的,但这是 concepts 的错误用例吗?
我也遇到过这个与元素可迭代相关的帖子here,但我不确定这如何适用于我的案例。
【问题讨论】:
-
有几个不同的iterator concepts,你可能会选择最广泛的一个,它仍然允许你编写你想到的算法。也许
random_access_iterator? -
@NathanPierson 是的,谢谢你,我可以使用一些迭代器概念。但是,如果我使用
random_acces_iterator的话,我对我的语法会是什么样子感到有点困惑。函数签名是什么样的? -
函数的约束通常与其实现密切相关。您指的是什么可迭代对象?它是一个迭代器吗?或者它是一个可以用迭代器迭代的范围?另外
len的类型不应该是int,不是泛型的。 -
仅供参考
declspec(auto)似乎在这里可疑。我希望中位数计算函数返回一个常规的auto,因为我不知道你什么时候会想在这里返回一个引用。
标签: c++ templates c++20 c++-concepts function-templates