2013-07-06 3 views
0

그래서 remove_reference 또는 remove_pointer는 항상 기본 유형을 리턴합니다.boost :: remove_pointer는 어떻게 작동합니까?

템플릿 메타 프로그래밍에서이를 수행하기 위해 템플릿 전문화를 사용한다는 것을 알고 있지만 필자는이를 잘 이해하지 못합니다.

예를 들면 다음과 같습니다.

template<class T> 
struct AAA 
{ 
    typedef T Type; 
}; 

template<class T> 
struct AAA<T*> 
{ 
    // Why does T become int, not int * all of sudden? 
    // How come does this get rid of '*' in a specific way? 
    typedef T Type; 
}; 

int main() 
{ 
    AAA<int *>::Type MyVar = 3; // MyVar is not a pointer! 
    return 0; 
} 

은 분명히 뭔가를 누락 또는 일부 템플릿을 사용하여 규칙을 지정하고, 내가 잘 설명 좋은 기사를 찾을 수 없습니다.

도움을 주시면 감사하겠습니다.

고마워요.

+1

'T'가'int * '와 일치하도록 두 번째 전문 분야에서'T'가 필요로하는 것은 무엇입니까? – GManNickG

+0

@GManNickG 방금 고쳤습니다. 실수를해서 죄송합니다. –

+1

죄송합니다. 오타를 보지 못했습니다. 그건 나의 의도가 아니 었어. 나는 C++의 논리가 어떻게 작동 하는지를보기 위해 내가 준 질문에서'T'를 채우는 것을 의미합니다. 'T *'가'int * '에 매치되도록 (듯이)'T'는'int' 일 필요가 있습니다. 그래서 두 번째 전문 분야에서 'T'는 'int'입니다. – GManNickG

답변

2
// Why does T become int, not int * all of sudden? 

T* 그렇게 Tint를해야합니다, int*입니다.

관련 문제