c++ - C++ 中的谓词
问题描述
C++ STL 算法中的谓词参数被定义为模板中的类型参数。根据我的理解,谓词可以是两件事之一 -
1)具有 operator() 重载返回 bool 的结构。这可以用作 predicate 的模板参数中的类型。
2)返回 bool 的函数。这是模板中谓词的类型参数吗?
解决方案
让我们检查一个简单的定义:
template <typename T>
struct TD;
bool is_odd(const int x) {
return x % 2 != 0;
}
template<typename T>
void foo(T arg){
TD<T> type_displayer;
}
int main() {
foo(is_odd);
}
运行此代码时,您会收到错误消息。一个错误说:
“
TD<bool (*)(int)>
type_displayer”的类型不完整
这是我最喜欢的“hack”来检查推导的类型(T
来自foo
s 参数)。您可以清楚地看到我是如何将一个函数传递给foo
in 的main
,但推导的类型是<bool (*)(int)>
,它是一个指向返回bool
并接受一个int
作为参数的函数的指针。
这就是将函数作为参数传递给模板函数的全部内容。
推荐阅读
- android-fragments - 将 Xamarin.Forms 片段嵌入导致“孩子已经有父母”崩溃的片段中
- javascript - javascript on form 选项传递两个值,一个用于隐藏/可见功能,第二个用于数据值
- r - 代码不再适用于在 R 中的 vegan 中更改 metaMDS 中点的形状/颜色
- node.js - 使用 fs.writeFile 时如何不重复数据?
- c# - 在 .NET 4.5.2 项目中成功安装 NuGet 包没有参考
- python - 在 Python 中,R 的函数“复制”的等价物是什么?
- wordpress - API 的反向代理
- c# - 使用 Docker 创建和播种数据库时出错
- xsl-fo - 两行包含不同大小列的表格
- python - 如何使月份不超过12