3

我对书中的这段代码感到很困惑:

typedef int (*healthCalcFunc) (const GameCharacter&)

我明白 typedef double* PDouble,意思是这个词PDouble可以用来声明一个指向的指针double

但我无法理解的含义typedef int (*healthCalcFunc) (const GameCharacter&)

有没有人可以帮我解释一下?

提前致谢

:)

4

5 回答 5

5

在这种情况下,运算符优先级往往会妨碍。

这会创建一个别名(命名为healthCalcFunc),用于“指向以 const GameCharacter 作为其参数并返回 int 的函数的引用”的类型。

  1. int: 返回类型
  2. (*healthCalcFunc): 指向函数的指针——必须在括号中才能将 绑定*到名称而不是前面的int,这将声明一个函数返回一个指针而不是所需的函数指针。
  3. (const GameCharacter &): this 将指向的函数类型的参数列表。
于 2012-06-19T05:38:17.013 回答
5
typedef int (*healthCalcFunc) (const GameCharacter&);

它为描述函数指针的类型引入了一个名为healthCalcFunc的名称,采用一个类型的参数const GameCharacter&并返回一个int.

所以这意味着,如果你有一个函数:

int some_function(const GameCharacter&)
{
    //...
}

然后你可以创建一个指向上述函数的指针对象:

healthCalcFunc pfun = some_function;

然后使用pfun代替some_functionas:

some_function(args);  /normal call

pfun(args);  //calling using function pointer 
             //it is exactly same as the previous call

这种方法的好处是您可以将pfun(或some_function)传递给其他函数:

void other_function(healthCalcFunc pfun)
{
    //..
    pfun(args); //invoke the function!
    //..
}

healthCalcFunc pfun = some_function;

other_function(some_function);  
other_function(pfun); 

这里other_function将使用函数指针来调用函数。这样,下次您可以将与函数签名匹配的另一个函数传递给other_function并将other_function调用另一个函数。

于 2012-06-19T05:38:47.747 回答
0

它是一个函数指针——希望你的书会在某处解释这些;如果没有,您最喜欢的搜索引擎应该能够为您指明正确的方向。

于 2012-06-19T05:37:45.733 回答
0

这是返回intconst GameCharacter&作为参数的函数的函数指针的 typedef。

您可以使用创建函数指针,healthCalcFunc hp = &MyFunc;然后将其用作int n = (*hp)(GameCharacter());. 这里MyFunc会有这个签名:int MyFunc(const GameCharecter&);

于 2012-06-19T05:38:13.337 回答
0

这是一个函数类型定义。乍一看,这很奇怪,但你会习惯的。基本上,它所说的是,定义一个名为 的类型healthCalcFunc,它的返回值是一个整数,并且将一个常量GameCharacter引用作为它的唯一参数。

一般来说,函数指针声明的形式如下:

typedef return_type (*new_function_typename)(typeof_arg1, typeof_arg2, ...);

你可以像这样使用它:

new_function_typename functor;
functor = some_other_functions_name;
// or
functor = dlsym(dlopen_handle, "some_function_name"); // for dynamic loading

int retval = functor(arg1, arg2);
于 2012-06-19T05:56:01.220 回答