2013-07-06 48 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'需要在第二個特化中做什麼,以便'T *'匹配'int *'? – GManNickG

+0

@GManNickG我剛剛解決了這個問題。抱歉寫錯了。 –

+1

對不起,甚至沒有看到那個錯字。我不是這個意思。我的意思是在我給你的問題中填寫'T'來看看C++中的邏輯是如何工作的。對於'T *'來匹配'int *','T'需要是'int'。這就是爲什麼'T'在第二個專業領域是'int'的原因。 – GManNickG

回答

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

T*int*,所以T必須int

相關問題