问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

typedef问题

发布网友 发布时间:2023-10-05 05:48

我来回答

2个回答

热心网友 时间:2024-11-20 00:55

函数的类型是函数原型去除所有非类型标识符。
例如原型为int foo(float f, double d);的函数,它的类型是int(float, double)。(LS“函数不能作为类型”当然正确,函数不是类型;不过恐怕理解有误,函数还是有类型的。)
函数类型被用于声明函数,但不能定义函数,因为函数不是对象,C/C++不提供对于函数定义的初始化语法。
例如
int foo1(float f, double d);
int foo2(float f, double d);
int foo3(float f, double d);
可以简化为
typedef int footype(float, double);
footype foo1, foo2, foo3;
函数类型的主要应用是用于模板类型参数。例如template<R(P1, P2)>,函数类型R(P1, P2)是这里的模板类型参数。boost等库中有很多这类技巧。
上例中函数对应的函数指针类型为int (*)(float, double);。指针是对象,它可以被定义并初始化。并且,它可以作为函数的参数和返回值(函数本身就不行)。C语言中利用函数指针是通用函数回调的唯一手段。
例如(续上例):
int (*p1)(float, double) = &foo1;//函数类型在这里可以退化为对应函数指针类型,&可以省略。
footype* p2 = foo2;
int (*p3)(float, double) = NULL;
注意,这里要求源文件或库中有foo1、foo2的定义,否则会链接失败。定义时不能直接用footype,要老老实实写int foo1(float f, double d)之类作为函数头。
调用时,函数指针可以直接当作函数名称使用,例如p1(1.0f, 1.0d);。
此外,C++中还有函数引用。上例中对应的类型是int(&)(float, double)。具体用法类似,参照对象引用和对象指针的区别。
对于成员函数,有成员函数指针(但没有成员函数引用)。和对象指针不同,成员指针的值的含义比较模糊,取决于实现(编译器)。(题外话,对成员函数指针的sizeof结果也取决于实现,对于虚继承的成员函数,有些编译器中可达20。)一般来说,成员函数指针保存了成员在类定义中的偏移量信息。根据成员函数指针和对应类的实例,可以利用二元操作符->*和.*(不能被重载)运算符调用这个函数,左操作数为指向对象的指针或对象,右操作数为成员函数指针。
例如LZ的例子中,this->*pf,也可以用(*this).*pf来调用成员函数指针pf指向的成员函数。
====
[原创回答团]

参考资料:原创

热心网友 时间:2024-11-20 00:55

typedef void (B::*pf)();
定义了一个指针,这个指针指向B中的一个函数,此函数没有参数也没有返回值。这个指针是一个新类型,名字是pf,以后可以定义pf类型的变量。

void f(){;}
在类B中定义了一个函数f,无参数无返回值。

void f2(pf pf) {
(this->*pf)();
}
定义了函数f2,参数是pf类型的,无返回值。f2函数中,会将参数pf指向的函数执行一次。

void f3() {
f2(f);
}
定义了函数f3.无参数,无返回值。其中调用了f2函数,参数是f。f代表函数f的地址。

==========补充============
函数本身是不可以做类型的,但是指向函数的指针是可以的。这里的pf实际上是一个指向函数的指针。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 描写人生气的句子、词语17 它们身体鼓鼓的,像半粒豌豆,鞘翅光滑或有绒毛,通常黑色的鞘翅...2 Total Commander中如何打开word2007 苹果手机微信聊天记录在哪个文件夹里 想知道: 普洱市 从普洱市到孟连县要多长时间,班车几点发车谢...22 钢琴教师考级研讨会的总结怎么写3 你都这么大了,难道不该懂事吗? 狗狗快到1岁半,最近老爱发脾气,把我手咬了,狗狗为什么变脾气... 你都这么大了,难道不该懂事吗? 一个加我,我加上了,只有昵称,他对我语言上攻击,造谣,... 求一个手机射击游戏,是打僵尸的,视角是从上往下,有好多种枪械...2 有一个人一直发微信给我老公诋毁我的话说的很肮脏 电脑显示器外屏坏了能换么?6 “闲”的繁体字是什么? 闲是什么字的繁体字2 魔兽世界双头犬有几种啊,我见过绿色的和红色的,身上滴液体的犬...3 填写简历邮箱获取认证码时老是出错怎么办 它们身体鼓鼓的,像半粒豌豆,鞘翅光滑或有绒毛,通常黑色的鞘翅...31 它们身上有绿色蓝色黄色这三种颜色的英文怎么? 长沙到云南普洱市孟连县的乘车路线1 关于萧伯纳的资料。急! 电视剧中经常看到的“员外”,到底是个什么官? ...村里贷款修路有20年了,现在银行催款,村里不还怎么办? 电视剧中的“员外”是个什么官?“员外”有实权吗? 员外看不起穷书生,哪料到刚解除婚约,这是是什么电影? 闲字繁体字怎么写1 我和朋友闹别扭,我先删除她,之后我后悔了,查到她的,但... 平板电脑触摸屏碎了自己怎么换6 我的手机微信手写不能发送是怎么回事,加号不下去没有发送二字6 手机屏幕坏了,自己想换个屏幕。自己能换好吗?260 微信删除好友以后对方还会有我们的对话界面吗? 我给一个人发了...6 翡翠的专业知识有哪些29 翡翠专业知识:手把手配图带你了解翡翠都有哪些种类 别人叫我用手机号码给他解封,对我有啥影响?是不是骗子的...531 我和朋友闹别扭,我先删除她,之后我后悔了,查到她的,但... 普洱市到孟连县多少公里5 有谁记得大概是五六年前有一部古装电视剧,剧里的女主角名叫柳笑...9 我该不该和女朋友分手呢?18 女朋友老动不动发脾气,我脾气比较强,但为了她已经很忍了。我该... 女朋友总因为一点小事和我发脾气,动不动就要分手,感觉一点都不...17