在typedef中使用type时包含在头文件中的规则

时间:2009-03-10 19:06:51

标签: c++ header-files

如果我创建

typedef double (MyClass::*MemFuncGetter)();

在头文件中,我是否需要包含“MyClass.h”或转发声明足够?

标题文件:

#ifndef _TEST_
#define _TEST_


#include "MyClass.h" //do I need this?
//or I can just say class MyClass;

typedef double (MyClass::*MemFuncGetter)();


#endif

这里的连锁规则是什么?

4 个答案:

答案 0 :(得分:2)

你只需要上课的前瞻声明即可:

#ifndef _TEST_
#define _TEST_

class MyClass;
typedef double (MyClass::*MemFuncGetter)();

#endif

但请注意,通过不包括整个类,编译器必须做额外的工作来处理MyClass是多虚拟继承混乱的情况,因为它不知道。在某些情况下,这可能意味着每个函数指针实际上最多占用20个字节的内存。如果你已经定义了整体,那么每个函数指针只需要4个。(当然,这些大小都是编译器相关的)。

答案 1 :(得分:0)

创建文件MyClassFwd.h并放在那里

class MyClass;
typedef double (MyClass::*MemFuncGetter)();

并包括前进decl - 这就足够了。不要复制和粘贴typedef。在你的'MyClass.h'中只包含'MyClassFwd.h'

答案 2 :(得分:0)

你需要至少在范围内声明MyClass - 至少是前瞻声明。 Typedef创建一个别名。它不会创建新类型或更改链接。链接将是MemFuncGetter的链接。

答案 3 :(得分:0)

是的,向前退缩就足够了。