Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2010年2月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
统计
随笔 - 379
文章 - 2
评论 - 439
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(26)
给我留言
查看公开留言
查看私人留言
随笔分类
(335)
aspx/js
(rss)
boost库等(9)
(rss)
Cef(2)
(rss)
Cef/Chrome(1)
(rss)
Game引擎(82)
(rss)
JAVA(1)
(rss)
Java Antroid(10)
(rss)
OpenGL/DX(1)
(rss)
Python脚本(7)
(rss)
QT编程(149)
(rss)
QT源码分析(2)
(rss)
UML
(rss)
编程基础(12)
(rss)
软件调试(1)
(rss)
软件工程(5)
(rss)
设计模式(7)
(rss)
数学建模(1)
(rss)
网页搜素(2)
(rss)
音频视频(17)
(rss)
杂项(26)
(rss)
随笔档案
(379)
2019年9月 (20)
2019年8月 (20)
2019年6月 (1)
2019年3月 (1)
2018年6月 (1)
2017年9月 (5)
2017年5月 (2)
2017年4月 (2)
2017年3月 (4)
2016年10月 (3)
2016年8月 (1)
2016年6月 (1)
2016年5月 (1)
2016年4月 (6)
2016年3月 (2)
2016年2月 (2)
2016年1月 (4)
2015年12月 (5)
2015年11月 (3)
2015年10月 (2)
2015年8月 (12)
2015年7月 (2)
2015年6月 (1)
2015年1月 (1)
2014年12月 (4)
2014年11月 (2)
2014年6月 (1)
2014年4月 (1)
2014年3月 (1)
2013年12月 (2)
2013年11月 (1)
2013年10月 (3)
2013年9月 (1)
2013年8月 (2)
2013年7月 (2)
2013年6月 (3)
2013年4月 (1)
2013年2月 (4)
2013年1月 (9)
2012年12月 (3)
2012年11月 (1)
2012年10月 (2)
2012年9月 (2)
2012年8月 (2)
2012年7月 (2)
2012年6月 (3)
2012年5月 (7)
2012年4月 (4)
2012年3月 (4)
2012年1月 (2)
2011年12月 (8)
2011年11月 (13)
2011年9月 (6)
2011年8月 (10)
2011年7月 (1)
2011年6月 (4)
2011年5月 (12)
2011年4月 (4)
2011年3月 (19)
2011年1月 (1)
2010年12月 (3)
2010年11月 (2)
2010年10月 (4)
2010年9月 (6)
2010年8月 (11)
2010年7月 (4)
2010年6月 (11)
2010年5月 (15)
2010年4月 (28)
2010年3月 (23)
2010年2月 (23)
文章档案
(2)
2014年3月 (1)
2011年5月 (1)
XYZ
codeproject.com
lua
ode
蜗牛选股
程序员
华佗中医大师
积分与排名
积分 - 767373
排名 - 19
最新随笔
1. QML 单张图片显示翻转效果
2. QML 图片翻转动画
3. ffmpeg av_seek_frame
4. QML StackLayout
5. QML Canvas旋转和平移
6. QML透明度动画
7. QML不响应下层右键菜单
8. QML 右键菜单
9. QML 菜单项
10. QML 环形进度条
最新评论
1. re: QT学习笔记-35:QTableWidget动态增加行的方法
写的真好
--垃圾袋
2. re: Qt笔记:106 - QT 一个简单的数据库查询软件
简单的数据库查询软件 Mark
--linda
3. re: BGE GUI升级
小弟也准备开发gui库,可以苦于没有例子,希望给封源码学习学习。
better@geekzhou.uu.me
--zhouxiang
4. re: 发布一个基于OPENGL的GUI库
better@geekzhou.uu.me
求一份代码,也再做同样事,不过到现在都没思议,主要没学过opengl。csdn要积分,没积分。
--zhouxiang
5. re: Qt笔记:100 - QTableWidget列排序
QT的原理 MARK下
--linda
阅读排行榜
1. c++小问题has no member named ''XXX‘(24671)
2. c++软件开发第三方库大全(19477)
3. QT学习笔记-29.使用QT HTTP下载网络文件(12997)
4. gcc之declaration does not declare anything解决方案(11778)
5. QT学习笔记-35:QTableWidget动态增加行的方法(11734)
评论排行榜
1. 盖莫游戏引擎-插件系统(17)
2. loki技法(1).静态断言(13)
3. loki技法(2).CheckReturn(12)
4. vc6使用rapidxml(12)
5. boost库使用注意事项(1)-从boost::tokenizer说起(12)
c++中使用成员函数作为函数参数的方法
今天由于要写一些东西,遇到了需要把成员函数作为函数参数的问题
总结有以下几个办法:
1.使用类的静态成员:
最简单的.只是这种办法与使用普通函数没有什么区别
2.模板的方法
1
template
<
class
T
>
2
void
Call(T
*
ptr,
void
(T::
*
MenFn)())
3
{
4
(ptr
->*
MenFn)();
5
}
1
class
MyClass
2
{
3
public
:
4
void
Call()
5
{
6
7
}
8
};
9
10
MyClass cs;
11
Call(
&
cs,
&
MyCall::Call);
3. 虚拟继承的方法
1
class
Base
2
{
3
public
:
4
virtual
void
Call()
=
0
;
5
};
6
7
class
SubClass :
public
Base
8
{
9
public
:
10
void
Call(){
}
11
};
12
13
void
Call(Base
*
ptr)
14
{
15
ptr
->
Call();
16
}
4.use boost.
1
#include
<
boost
/
bind.hpp
>
2
#include
<
iostream
>
3
using
namespace
std;
4
struct
MyClass
5
{
6
void
Print(
const
char
*
str)
7
{
8
cout
<<
"
holle
"
<<
str
<<
endl;
9
}
10
}
;
11
12
template
<
class
_Fun
>
13
void
CallBackFun(_Fun a,
const
char
*
str)
14
{
15
t(n);
16
}
17
18
int
main()
19
{
20
MyClass mc;
21
CallBackFun(boost::bind(boost::mem_fn(
&
MyClass::Print),
&
mc,_1),
"
world
"
)
22
return
1
;
23
}
24
5.使用静态成员函数或者联合体模拟之
1
union
2
{
3
void
(G_CALL ParticleSystem::
*
PhysicsThreadFun)(
void
*
arg);
4
ThreadFun f;
5
}fn;
6
fn.PhysicsThreadFun
=
&
ParticleSystem::PhysicsThreadFun;
7
thread_id
=
CreateThread(fn.f,
&
ps);
6.也许.
对loki库不太熟悉也许上面也有答案吧
posted on 2010-02-23 19:08
ccsdu2009
阅读(6419)
评论(6)
编辑
收藏
引用
Comments
#
re: c++中使用成员函数作为函数参数的方法
sanit
Posted @ 2010-02-23 22:38
第二种方法11行,Call(&cs,&MyCall::Call);
应该是&MyClass::Call吧?
回复
更多评论
#
re: c++中使用成员函数作为函数参数的方法
ccsdu2009
Posted @ 2010-02-24 08:27
@sanit
没问题的
回复
更多评论
#
re: c++中使用成员函数作为函数参数的方法
XYFOR1234
Posted @ 2010-02-24 10:30
函数指针不行吗?是不是因为THIS指针的关系有一个偏移量?这也好解决,不过是编译器相关的。
回复
更多评论
#
re: c++中使用成员函数作为函数参数的方法
zuhd
Posted @ 2010-02-24 13:23
void Call(Base *ptr)
{
ptr->Call();
}
直接这样传函数指针不就可以了吗?为什么要求是虚拟继承啊,普通的函数指针不行吗?
回复
更多评论
#
re: c++中使用成员函数作为函数参数的方法
永远在一起
Posted @ 2010-12-15 22:14
谢谢,学习了,不过最后一种不怎么明白
回复
更多评论
#
re: c++中使用成员函数作为函数参数的方法
porphyah
Posted @ 2014-10-25 00:14
如果Lambda表达式能与函数指针相互转化,那就能像C#一样轻轻松松写个临时的匿名函数了
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理