1

这是一个函子:

class add_x {

 int x;

public:
  add_x(int x) : x(x) {}
  int operator()(int y) { return x + y; }

};

从主要我可以做到这一点:

add_x add10(10); // create my functor 
int i = add10(20); // add 20 and return it 

如何将仿函数与 结合起来typedef

例如,我遇到了这个:

typedef int (*myfuncType)(float f, char c1,char c2);
myfuncType pt2Function = NULL; 

但是我在这里到底定义了什么?运营商()

4

3 回答 3

5

函数指针——顾名思义——只是一个指向函数的指针。您不能使用指向函数的指针来指向函子,函子本质上是一个具有重载 () 运算符的类。

您可能对 C++11 中的 std::function 感兴趣:

#include <functional>

(...)
std::function<int(int)> fn = add_x(10);
int i = fn(20);


编辑:好的,我明白了,你在问什么。

也许一些代码会让事情变得清晰。

int fn(float a, char b, char c) { ... }

(...)

typedef int (*myFuncType)(float f, char c1, char c2);

myFuncType ptrToFun = &fn;

(*fn)(1.0f, 'a', 'z');

此 typedef 创建一个“指向函数的指针”类型。如果您声明这种类型的变量,那么您将能够为其分配一个指向函数的指针(使用常规 & 运算符提取),并且 - 例如 - 传递给另一个函数或只是存储(或调用此函数)。

std::function 更加灵活,因为您可以在其中存储指向函数、仿函数甚至 lambda 的指针并正常调用它们。

于 2012-07-13T07:09:03.757 回答
3

我不明白你的第一个问题 ( How can I combine the functor with typedef ?),所以我无法回答这个问题 - atypedef会像与任何其他类一样工作。

关于你的第二个问题:线

typedef int (*myfuncType)(float f, char c1,char c2);

myfunctType类型一个名字(int (*)(float, char, char)_floatcharint

所以

myfuncType pt2Function = NULL;

定义一个可以指向上述函数的变量,但现在将指针设置为 NULL。

于 2012-07-13T07:10:46.150 回答
1

这里,myfuncType是一种描述函数指针的类型,具有三个浮点参数并返回一个 int。仿函数只是一个带有 operator() 重载的类。所以 typedef 就像其他类一样使用。

typedef add_x add将工作。

于 2012-07-13T07:12:41.907 回答