IS C STL模板参数足够精确
Is c++ STL template parameter precise enough?
例如,c std :: find_if被实现了:
template <class InputIter, class UnaryPredicate>
InputIter find_if(InputIter begin, InputIter end, UnaryPredicate pred) {
for (; begin != end; begin++) {
if (pred(*begin))
return begin;
}
return end;
}
-
InputIter
应该是std::input_iterator_tag
类型,但是在此功能中,可以编译具有operator++
operator++(int)
的任何类型。 -
UnaryPredicate
应该像bool function(const T &value)
一样,但是任何功能返回int
double
都可以编译。
STL模板参数是否足够精确?似乎没有检查编译时所有可能的错误。
我们可以像:
一样实现它template <T, Iter<? super std::input_iterator<T>>, Pred<? implement bool (const T&)>>
Iter find_if(Iter begin, Iter end, Pred p) {
for (; begin != end; begin++) {
if (p(*begin))
return begin;
}
return end;
}
在此假代码中,我希望Find_if为T
类型工作,它在[begin, end)
中具有范围,并使用bool (const T &)
检查它是否已稳定?
隐藏在这里有两个不同的问题。我不知道你打算问哪一个。
第一个关于find_if
。明确定义find_if
的方式允许您要拒绝的参数类型,并且通常被视为功能。因此,以一种或另一种方式实施检查将不一致,并且会拒绝有效的代码。
第二个是关于C 语言。目前,它不提供与检查使用情况更明确地检查或甚至描述模板参数的约束的方法。C 圆中用于此系统的名称是概念。有一些库旨在帮助检查它们(例如,在Boost中(,并且在GCC中实施了一种技术规范,描述了如何扩展该语言以包括一个定义的概念概念,但是TS尚未存在并入标准。
相关文章:
- 有没有办法捕获 STL 函数未被赋予正确参数的异常?
- C++ 如何将参数传递给 STL 函数
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 作为 Stl 容器参数的模板类
- STL 容器在函数中作为模板参数,在调用中出错
- 可以在 stl 容器上完成非类型模板参数吗?
- STL vector.insert 方法期望_InputIterator作为参数
- 模板化函数以从输入参数推断返回类型 stl-container
- IS C STL模板参数足够精确
- 如何断言模板参数的类型 STL 迭代器类型
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 意外参数通过使用STL数字的顺序
- 无法使用 std::function 作为参数类型(需要函数指针版本)宁愿像 STL 这样的模板,但随后它无法推断参数
- STL 按多个参数C++排序
- 模板参数适用于不同的STL容器
- 在SGI STL的实现中,向量的push_back函数不使用默认参数
- C++模板编程/STL 推导参数
- 将适当类型的迭代器作为参数返回适当类型的STL容器
- 如何将函数中的stl列表传递为C 中的参数
- 使用类作为具有正向延迟的 STL 类的模板参数