我想在C++中使用模板實現HashMap(並且同時學習模板如何工作)。爲此,我需要調用參數類型爲T
的方法T :: equals()
。從模板類的方法調用類型參數的方法(C++)
這是簡化的什麼,我需要的代碼:
template < class T > class Map{
public:
T* [] cells;
replaceIfEquals(int index, T a){
if(cells[index].equals(a); ) cells[index] = a;
};
};
這裏假設T
應該像
class Point2D : public Comparable {
public:
virtual bool equals(Object o){ Point2D p = (Point2D)o; return (ix == p.ix) && (iy == p.iy); };
};
其中一些更普遍的類型的子類型(在Java中我會使用的界面)
class Comparable {
public:
virtual bool equals(Object o){ return false; };
};
我想我錯過了一些非常基本的c模板的接受。
什麼問題? – 0x499602D2
'T'可以是任何類,並不是所有的類都有一個方法'T.equals(Object o)'。那麼編譯器如何知道我稍後將只使用'Comparable'類? –
編譯器只有在它試圖用特定的T實例化模板時才知道,並檢查該T是否具有適當的成員函數。 –