用C++概念描述谓词 TS.
Describing Predicate with C++ Concepts TS
想象一下std::all_of
在未来的C++标准中的实现:
// constraining InputIt doesn't concern this question
template<typename InputIt, typename Pred>
bool all_of(InputIt first, InputIt last, Pred pred)
requires Predicate<Pred, decltype(*first)>()
// requires Predicate<Pred>() // this would accept any, would like this
{
for (; first != last; ++first)
if (!pred(*first))
return false;
return true;
}
其中,概念Predicate
定义为:
template<typename Pred, typename Param>
concept bool Predicate()
{
return requires(Pred p, Param a) {
{ p(a) } -> bool;
};
}
这显然按预期工作。(同样当函数对象具有默认参数时,但从技术上讲,这仍然不是一元谓词吗?
无论如何,必须指定谓词接受的类型有时可能是一种负担。
有没有办法实现这样一个概念,它将为函数对象返回true
,该函数对象采用一个或多个未显式指定类型的任何类型的参数?
有没有办法实现这样一个概念,对于采用一个或多个未显式指定类型的任何类型的参数的函数对象返回 true?
我认为没有合理的方式来表达这一点。也许通过反射建议,可以检查函数对象是否只接受auto
或等效的普通模板参数T
的参数。
关于:
// requires Predicate<Pred>() // this would accept any, would like this
概念测试类型的属性,因此您实际上需要指定类型P
应满足Predicate<P,A>()
的参数类型A
。如果你可以在不指定A
的情况下做到这一点,那么Predicate
就无法检查P
和A
之间的指定约束,而这正是概念的用途。
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 概念TS检查忽略私有访问修饰符
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 为 C++11 算法组合多个谓词
- 处理 std::enable_if<...中谓词的逻辑"OR">
- std::map与谓词与初始化列表
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 排序谓词没有传递对索引对象的引用?
- 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 如何在算法中使用谓词函数find_if?
- 是否可以使用三元切换/控制/谓词成员函数调用?
- 'std::condition_variable::wait_for"经常调用谓词
- 从 TS 到C++的平面缓冲区不起作用
- 为什么以及如何在 C++ 中使用 bind() 作为谓词?
- 如何为 std::unordered_set 定义自定义键等效谓词?
- 如何在C++03中用自定义谓词调用std::unique
- 用C++概念描述谓词 TS.