c ++使用方法作为函数的参数

时间:2014-07-22 10:51:48

标签: c++

我不明白为什么以下代码编译和运行:

template<typename Predicate> 
void foo(Predicate p) {      
}

bool g(int n) {     
}

void user(int n) { 
    foo(g); 
}

foo应该得到一个将在数据结构上运行的函数对象,但我使方法更简单,因为我不明白这是如何工作的?方法不是一个对象。正常的方法是创建一个新类,覆盖operator(),然后发送该类的实例。

2 个答案:

答案 0 :(得分:4)

嗯,在这种情况下,Predicate参数被类型为bool (*func) (int)的函数指针替换。这没什么不对......

答案 1 :(得分:3)

Predicate模板参数几乎可以是任何类型。因此,您可以将它用于函数指针和类以及基本类型。

如果使用函数参数p作为函数,则它可以是任何可调用的函数,如函数指针,其类具有operator()成员函数的对象,指向a的指针静态成员函数,std::bind对象,std::function对象或lambda expression

它不能成为指向成员函数的指针,因为要调用指向成员函数的指针,您需要一个实例来调用它。对于此用途std::bind