谁能帮我解释 typedef 在C++中的使用

Who can help me explain the use of typedef in C++?

本文关键字:C++ typedef 解释      更新时间:2023-10-16

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

typedef int (*healthCalcFunc) (const GameCharacter&)

我明白 typedef double* PDouble 表示单词 PDouble 可用于声明指向double的指针。

但是我无法弄清楚typedef int (*healthCalcFunc) (const GameCharacter&)的含义

有人可以帮助我解释一下吗?

提前致谢

:)

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_functionother_function将调用该另一个函数。

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

这将创建一个别名(名为 healthCalcFunc ),用于类型"指向函数的指针,该函数引用 const GameCharacter 作为其参数并返回一个 int"。

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

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

这是返回

int并将const GameCharacter&作为参数的函数的函数指针的 typedef。

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

这是一个函数类型定义。乍一看,这很奇怪,但你会习惯的。基本上,它所说的是,定义一个名为 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);