幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: lw

[通用编程] [第二部分]为状态写代码

[复制链接]

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
 楼主| 发表于 2006-11-7 19:36:44 | 显示全部楼层
说得也是,不过ENUM确实已知从0开始,然后如果我在
static const int S1 和 static const int S2 中间想加入一个S1_5的状态就需要麻烦了……
这样写体现了我很懒的一面………………
Style-C
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-1-1 14:15:31 | 显示全部楼层
新手一問,不是所有指向函式的指標
所指的函式也要為static嗎?

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
 楼主| 发表于 2007-1-1 21:52:20 | 显示全部楼层
不是哦,成员函数也是可以获取地址滴,不过用的时候必须要有对象:)
举个例子:

class A
{
     void Func( void ) {}
};

如果需要使用的话,就:
&A::Func
获得地址啊,其类型为:
void (A::*)( void )

用的时候提供一个obj ref或者obj ptr比如:
(objref.*funcptr)( );
.* ->*是操作符号

一般来说这样比较少用,但是一种比较有趣的用法(偶个人认为)
就是当作消息映射 let :
"open" -- &A::Open();
"close" -- &A::Close();

这样只需要一个接口函数:
A::SendMessage( std::string& );
就可以任意扩充操作了……
不过缺点所有的函数都需要一个原型(参数想办法咯……)

PS:以上成员函数指针在C++ PRIMER 3RD 里面有很详细说明~
[s:4]
Style-C
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-1-4 20:35:31 | 显示全部楼层
對某C來說,那有趣的作法是很神的做法,還沒有理解....Nihaha...
第一個的意義是
class A
{
  void Func( void ) {}
};
A AObj;
....
(AObj.*Func)(....);
這個意思嗎?

後附,某C還沒看過C++ Primer....對不起呢...
正在抓一本來看

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
 楼主| 发表于 2007-1-14 16:40:12 | 显示全部楼层
不是,(AObj.*Func)(....);
的意思就是说~Func是一个地址值,而
class A
{
void Func( void ) {}
};
是一个函数,所以是不同的概念~
这样说比较好:

class A
{
void Func1( void ) {}
void Func2( void ) {}
void Func3( void ) {}
};
typedef void (A::*A_Void_Void_Func)(void);
A_Void_Void_Func aobjfuncptr;

然后就可以:
aobjfuncptr = &A::Func1;
至于使用嘛……你有一个对象的话:A aobj
(aobj.*aobjfuncptr)();
aobjfuncptr = &A::Func2; // 运行时变更
(aobj.*aobjfuncptr)();
aobjfuncptr = &A::Func3; // 运行时变更
(aobj.*aobjfuncptr)();
以上分别调用了A的三个成员函数各一次……
[s:8] 小心偶自己也胡调咯~~呵呵 [s:4]
(可能代码写的有笔误,不对也请指正哦~)
Style-C
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-20 01:30 , Processed in 0.018719 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表