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;
}
很顯然,我失去了一些東西,或者在使用模板中的一些指定的規則,我找不到解釋這口井的任何好文章。
任何幫助,將不勝感激。
非常感謝。
'T'需要在第二個特化中做什麼,以便'T *'匹配'int *'? – GManNickG
@GManNickG我剛剛解決了這個問題。抱歉寫錯了。 –
對不起,甚至沒有看到那個錯字。我不是這個意思。我的意思是在我給你的問題中填寫'T'來看看C++中的邏輯是如何工作的。對於'T *'來匹配'int *','T'需要是'int'。這就是爲什麼'T'在第二個專業領域是'int'的原因。 – GManNickG