2013-09-24 3 views
0
template<int32_t ID= 0, class ID_TYPE = int32_t> 
    class Event { 
    public: 
     typedef ID_TYPE type; 
     typedef Event<ID, ID_TYPE> event_obj_type; 
    ..... 
} 

"Event<ID, ID_TYPE>"은 무엇을 의미합니까? 클래스 이름은 <입니다.> 전에 본 적이 없습니다. 아무도 나에게 계몽 수 있습니까? 감사합니다.<> 기호가있는 템플릿 클래스 이름

+3

당신은 templates''이 질문 태그, 그래서 분명히이 클래스 템플릿 것을 알고있다. 'Event'는 단순히'class Banana'와 비슷한 이름입니다. 당신의 질문은 정확히 무엇입니까? – us2012

답변

1

이벤트는 템플릿입니다. 컴파일 타임에 비슷한 클래스를 만들기위한 패턴입니다. 코드의 일부 위치에서 다음을 수행하는 경우 : 이벤트 < 0, int32_t> A; 이벤트 < 3, char> A;

두 개의 클래스가이 템플릿에서 정의됩니다. 하나는 ID = 0, ID_TYPE = int32_t이고 다른 하나는 ID = 3, ID_TYPE = char입니다.

class Event 
{ 
    public: 
    typedef int32_t type; 
    typedef Event event_obj_type; 
    ..... 
} 
+0

하지만 typedef에 대한 질문은 확실합니까? – doctorlove

+0

그래서 <>로 표시된 클래스 이름은 무엇입니까? 감사! – BufBills

+0

<>은 템플릿 기반 클래스의 인스턴스에 사용 된 유형을 정확하게 나타내는 데 사용됩니다. 이것은 C++ 핵심 구문입니다. C++의 템플릿 기본 사항을 참조하십시오. –

3

당신은 기능 템플릿 아마 잘 알고 : 당신은 첫 번째를 분해하면

[편집] , 클래스 정의는 다음과 같을 것입니다. 이 :

Event<ID, ID_TYPE> 

클래스 템플릿입니다. 함수 템플릿 인수를 사용하여 컴파일러가 템플릿 형식 인수를 추론하는 데 도움이되는 함수 템플릿 인스턴스화와 달리 클래스 템플릿을 사용하면 명시 적으로 템플릿 유형 (꺾쇠 괄호 안에)을 전달해야합니다.

An Idiot's Guide to C++ Templates - Part 1

관련 문제