yy 发帖数: 45 | 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)();
谢谢 | T*******x 发帖数: 8565 | 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:
|
|