谁能帮我解释 typedef 在C++中的使用
Who can help me explain the use of typedef in C++?
我对书中的这段代码感到非常困惑:
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_function
,other_function
将调用该另一个函数。
在这种情况下,运算符优先级往往会妨碍。
这将创建一个别名(名为 healthCalcFunc
),用于类型"指向函数的指针,该函数引用 const GameCharacter 作为其参数并返回一个 int"。
-
int
:返回类型 -
(*healthCalcFunc)
:指向函数的指针 -- 必须在括号中才能将*
绑定到名称而不是前面的int
,这将声明一个返回指针而不是指向函数的所需指针的函数。 -
(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);
- C++:TypeDef使用元组
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 在类模板中使用 typedef 时出错
- 模板类中的 typedef 语句
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- 向前声明指向类的 typedef 指针
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何创建 typedef 结构的前向声明
- 从 Typedef 数据类型中删除常量
- typedef vector size_type in header file
- typedef 别名的析构函数
- 如何使用 typedef 创建多个数组?
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 模板类编译问题与 typedef 变量