首页 > 解决方案 > C++ 中的谓词

问题描述

C++ STL 算法中的谓词参数被定义为模板中的类型参数。根据我的理解,谓词可以是两件事之一 -

1)具有 operator() 重载返回 bool 的结构。这可以用作 predicate 的模板参数中的类型

2)返回 bool 的函数。这是模板中谓词的类型参数吗?

标签: c++

解决方案


让我们检查一个简单的定义:

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来自foos 参数)。您可以清楚地看到我是如何将一个函数传递给fooin 的main,但推导的类型是<bool (*)(int)>,它是一个指向返回bool并接受一个int作为参数的函数的指针。

这就是将函数作为参数传递给模板函数的全部内容。

有关函数指针的参考,请参阅此问题本教程


推荐阅读