avatar
yy
1
看了看一些source code, 有一些typedef读起着实比较费劲,
比如:
template
class SimpleCommand: public Command{
public:
typedef void (Receiver::* Action)();
SimpleCommand(Receiver* r, Action a):
_receiver(r), _action(a){}
virtual void Execute();
private:
Action _action;
Receiver* _receiver;
}
请问有什么比较简单的trick或者rule 来读这个 typedef
typedef void (Receiver::* Action)();
谢谢
avatar
T*x
2
读typedef的trick是这样的:
你先把typedef这个关键字去掉,这个语句就变成了一个变量声明,
再加回typedef,就定义了一个这个变量所属的类型。
比如你这个
typedef void(Receiver::* Action)();
去掉这个typedef,就是一个函数指针变量的声明,
这个指针指向一个函数,这个函数1.没有参数2.没有返回值3.有一定的scope --
必须指向一个成员函数。加回typedef后,就定义了一个相应的类型。
请注意这两个的不同:
void func();
void (*func)();
前者是一个函数的prototype,后者是一个函数指针变量的声明,
我们这里要得是后者(去掉typedef之后)。

【在 yy 的大作中提到】
: 看了看一些source code, 有一些typedef读起着实比较费劲,
: 比如:
: template
: class SimpleCommand: public Command{
: public:
: typedef void (Receiver::* Action)();
: SimpleCommand(Receiver* r, Action a):
: _receiver(r), _action(a){}
: virtual void Execute();
: private:

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。