我对书中的代码感到困惑:
typedef int (*healthCalcFunc) (const GameCharacter&)
我理解
typedef double* PDouble
,表示PDouble
一词可用于声明指向double
的指针。
但我无法弄清楚typedef int (*healthCalcFunc) (const GameCharacter&)
有没有人可以帮我解释一下?
提前致谢
:)
答案 0 :(得分:5)
在这种情况下,运算符优先级往往会妨碍。
这创建了一个别名(名为healthCalcFunc
),用于“指向函数的指针,该函数将const GameCharacter作为参数并返回一个int”。
int
:返回类型(*healthCalcFunc)
:指向函数的指针 - 必须在parens中将*
绑定到名称而不是前面的int
,这将声明一个函数返回指针而不是期望的指向函数的指针。(const GameCharacter &)
:这将指向的函数类型的参数列表。答案 1 :(得分:5)
typedef int (*healthCalcFunc) (const GameCharacter&);
它引入了一个名为 healthCalcFunc 的名称,用于描述函数指针的类型,采用const GameCharacter&
类型的一个参数并返回int
。
所以这意味着,如果你有一个函数:
int some_function(const GameCharacter&)
{
//...
}
然后你可以创建一个指针对象,它将上述函数指向:
healthCalcFunc pfun = some_function;
然后使用pfun
代替some_function
:
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
时,会调用另一个函数。
答案 2 :(得分:0)
这是function pointer - 希望你的书能在某处解释这些内容;如果没有,您最喜欢的搜索引擎应该能指出正确的方向。
答案 3 :(得分:0)
对于返回int
并以const GameCharacter&
作为参数的函数的函数指针,这是typedef。
您可以使用healthCalcFunc hp = &MyFunc;
创建一个函数指针,然后将其用作int n = (*hp)(GameCharacter());
。此处MyFunc
将具有此签名:int MyFunc(const GameCharecter&);
。
答案 4 :(得分: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);