2014-05-10 2 views
6

나는 typedef C++에서 선언 된 수 없다는 것을 알고 있지만, 다음과 같은 문제에 대한 최선의 해결책이 무엇인지 궁금합니다. 이 같은 MyClass를 선언하는 헤더 파일이 있습니다앞으로 템플릿 클래스에 대한 typedef를 선언

#include <TemplateClassHeaders> 

struct MyStruct 
{ 
    // ... 
} 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass가 많은 장소에서 사용됩니다,하지만 대부분 그냥 포인터 Qt는 신호 슬롯 메커니즘을 통해 전달되는 것처럼. 전달 선언은 필요한 모든 것이지만 MyClass은 작동하지 않는 typedef입니다. MyClass에 대한 포인터를 사용하는 모든 헤더에 myclass.h를 추가하지 않는 방법이 있습니까?

+0

'MyClass 클래스는, 당신은 질문을 입력하는 동안'구글, 심지어 http://stackoverflow.com/questions/804894/forward-declaration-of-a를 공개해야한다, 제안 된 SO 링크보고 – mah

+1

@mah 두 번째 생각을 주거나 최소한 질문 전체를 자동으로 downvoting하는 대신에 (템플릿 및 템플릿 인수없이) 비슷한 질문으로 알려 주면 'class MyClass'는 작동하지 않습니다 (재 선언 때문에 템플릿이 포함되지 않은 경우에도 작동하지 않습니다). – jaho

+0

@Marian,'class MyClass;'는 관련된 템플릿이 없다면 작동 할 것입니다. –

답변

10

typedef를 전달 선언 할 수 없습니다. 그러나 의존하는 클래스를 TemplateClassNameMyStruct으로 전달 선언하면 MyClass을 정의 할 수 있어야합니다.

namespace Really { 
    namespace Long { 
    template <typename> 
    class TemplateClassName; 
    } 
} 

class MyStruct; 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass *p = 0; 
+0

감사합니다. – jaho

+0

이 못생긴, 불필요한 엉망을 수정해야합니다. 우리는 10 억 배나 더 진보 된 기능을 가지고 있습니다. "이봐,이 일을 이름으로 사용 **"은 기본적으로 불가능합니다. 기본적으로 ** typedef를 다시 만들려면 다른 사람이 정의한 _ 유형에 대한 내부 지식이 필요합니다! – user362515