社区
C++ 语言
帖子详情
>>神鬼传奇C++<< 之对象中的函数指针转换?
tgtt
2003-08-24 12:19:00
class C
{
public:
void (*ptst)();
void st();
};
void kk();
void (*ptkk)();
void main(){
ptkk=&kk;//这儿可以
C temp;
temp.ptst=&(temp.st);//为什么这儿就不行了呢?
}
...全文
45
9
打赏
收藏
>>神鬼传奇C++<< 之对象中的函数指针转换?
class C { public: void (*ptst)(); void st(); }; void kk(); void (*ptkk)(); void main(){ ptkk=&kk;//这儿可以 C temp; temp.ptst=&(temp.st);//为什么这儿就不行了呢? }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
widewave
2003-08-24
打赏
举报
回复
搞成静态的,不要 this指针试试。
tgtt
2003-08-24
打赏
举报
回复
哦,那怎么样才能达到转换的目的呢?
class C
{
public:
C(void){
ptst=&st;//这样也不行
}
void (*ptst)();
void st();
};
晨星
2003-08-24
打赏
举报
回复
因为是两个默认的东西你看不到。
void kk();
其实是
void __cdecl kk();
而
void C::st();
实质上是:
void _thiscall C::st();
逻辑上后者比前者多一个参数(this指针),所以不能相互转换。
fengfeng2003
2003-08-24
打赏
举报
回复
多谢 lifanxi(Byron)
lifanxi
2003-08-24
打赏
举报
回复
举个例子:
class A
{
public:
void f() {};
void g() {};
};
int main()
{
void (A::*pf)();
pf = &A::f;
A a;
(a.*pf)(); //相当于a.f();
pf = &A::g;
(a.*pf)(); //相当于a.g();
}
请先理解这个例子,然后就可以推出上面的正确调用方法应该是:
(temp.*temp.ptst)();
或者更清楚一点:
(temp.*(temp.ptst))();
fengfeng2003
2003-08-24
打赏
举报
回复
上面的程序虽然能完成赋值,但如何调用呢?
谁能解释一下
temp.ptst();//error
temp.C::ptst();//error
到底该怎么办!!!
fengfeng2003
2003-08-24
打赏
举报
回复
class C
{
public:
void (C::*ptst)();
void st();
};
void kk();
void (*ptkk)();
void main(){
ptkk=&kk;//这儿可以
C temp;
temp.ptst=C::st;//OK!!!!!
}
ckacka
2003-08-24
打赏
举报
回复
这个标题好炫哦~~
wbh0360
2003-08-24
打赏
举报
回复
steedhorse(晨星)兄说的极是,
这关系到编译器低层的行为,参数的压站等。
2023年美赛特等奖论文-F-2305794-解密.pdf
大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,2023年美赛特等奖O奖论文
亚太经社会:2024年亚太贸易便利化报告.pdf
亚太经社会:2024年亚太贸易便利化报告.pdf
消费者价格指数下的年通货膨胀率(1960-2021年).xls
消费者价格指数(CPI):按消费者价格指数衡量的通货膨胀反映出普通消费者在指定时间间隔(如年度)内购买固定或变动的一篮子货物和服务的成本的年百分比变化。通常采用拉斯佩尔公式进行计算。
node-v8.10.0-linux-x86.tar.xz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践
中
,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
网页制作基础学习--HTML+CSS常用代码.txt
网页制作基础学习--HTML+CSS常用代码
C++ 语言
64,665
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章