函数 - 如何将它们与typedef一起使用?

时间:2012-07-13 07:05:08

标签: c++ function functor

这是一个仿函数:

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; 

但我在这里完全定义了什么?运营商()

3 个答案:

答案 0 :(得分: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创建“指向函数的指针”类型。如果你声明一个这种类型的变量,那么你将能够为它分配一个指向函数的指针(用常规&amp;运算符提取),并且 - 例如 - 传递给另一个函数或者只是存储(或调用这个函数)。

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

答案 1 :(得分:3)

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

关于你的第二个问题:第

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

为类型myfunctType提供一个名称(int (*)(float, char, char))(读取:“一个函数,它接受float和两个char值,然后返回{{1 }}“)。

所以

int

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

答案 2 :(得分:1)

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

typedef add_x add将有效。