2011-01-21 33 views
1

如何寫明確的專業化爲目標明確分工,C++

Car<T> 

虛擬方法明確()?

template <class U> 
class List 
{ 
    public: 
     virtual void clear(); 

}; 


template <class T> 
template <> 
void List < Car <T> >::clear() //Specialization U = Car <T>, compiler error 
{ 
    .... 
} 

級車:

template <class T> 
class Car 
{ 
    T speed; 
    ... 
} 

編譯錯誤:

錯誤16錯誤C3855: '清單':模板參數 '汽車' 與聲明不符^ h:\目錄.HPP 75 錯誤20錯誤C2264:「一覽::明確」:在函數定義或聲明誤差;功能不叫H:\ List.hpp 75

但這種結構是OK

template <> 
void List < Car <double> >::clear() //Specialization U = Car <T>, compiler error 
{ 
    .... 
} 
+1

它是否是不帶`模板<>`行工作嗎? – fredoverflow 2011-01-21 13:45:48

回答

0

This faq item應該讓你去。

因此,它是這樣的:

struct Car 
{ 
}; 

template <> 
void List <Car>::clear() //Specialization U = Car <T>, compiler error 
{ 
    .... 
} 
2

我認爲你可以做到這一點的唯一方法是:

template<class T> 
class Car 
{ 
}; 

template <class U> 
class List 
{ 
    public: 
     virtual void clear(); 

}; 

template <class T> 
class List<Car<T> > 
{ 
    public: 
     virtual void clear() { /* specialization */ } 
}; 

,或者非在線版本:

template <class T> 
class List<Car<T> > 
{ 
    public: 
     virtual void clear(); 
}; 

template <class T> 
void List<Car<T> >::clear() { 
    /* specialization */ 
} 

自你是不是真的專業List<T>而是你被部分專業吧,因爲一個templat e型仍然出現。無論如何,我的推論可能是錯誤的。