2009-03-10 2 views
1

typedef에서 유형을 사용할 때 헤더 파일에 포함되는 규칙

헤더 파일에

typedef double (MyClass::*MemFuncGetter)(); 
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 

여기에 연결 규칙은 무엇입니까?

답변

2

당신은 클래스의 바로 전방 선언 괜찮 :

#ifndef _TEST_ 
#define _TEST_ 

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

#endif 

하지만 MyClass에가 다중 때 전체 클래스를 포함하지 않음으로써, 컴파일러는 경우를 처리하기 위해 추가 작업을 할 수있다 있습니다 가상 상속 혼란, 그것이 모르기 때문에. 어떤 경우에는 각 함수 포인터가 실제로 최대 20 바이트의 메모리를 차지할 수 있습니다. 반면에 전체를 정의했다면 각 함수 포인터는 4를 사용합니다 (물론 크기는 모두 컴파일러에 따라 다릅니다).

0

파일 MyClassFwd.h을 만들고 거기에

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

을 넣어 자명 한 일 입니 앞으로 포함 - 그 정도면 충분합니다. typedef를 복사하여 붙여 넣지 마십시오. 'MyClass.h'에는 'MyClassFwd.h'만 포함하면됩니다.

+0

내 질문에 앞으로 선언해도 충분할까요? –

0

최소 범위 선언에 적어도 MyClass이라는 선언이 있어야합니다. Typedef는 별칭을 만듭니다. 새로운 유형을 만들거나 연결을 변경하지 않습니다. 연결은 MemFuncGetter입니다.

0

예 예선 선언으로 충분합니다.

관련 문제