我有一個模板類template<typename T, typename R>
。 R的類型爲vector<T*>
或list<T*>
。運算符重載和模板特化
我想讓我的類超載[]
運算符,以便萬一它是一個向量,我將使用內置的[]
運算符來提高效率,如果它是一個列表,我將使用迭代器實現它。
對我來說,它聽起來就像模板專業化工作,所以我認爲寫這樣的事情:
template<typename T, typename R>
T& tContainer_t<T, R>::operator[](unsigned i)
{
//TODO with iterators
}
template<>
T& tContainer_t::operator[]<T, std::vector<T*> >(unsigned i)
{
// TODO with built in [] operator
}
這是錯誤的,編譯器不會允許這樣。
有沒有辦法讓它工作,或者我應該使用typeid()
來區分運行時的兩個對象,並據此採取行動?
認爲我們可以就回答這個問題達成一致。 :-) –
@BoPersson:我想我們可以:) –