來自PHP背景,我試圖學習C++,因爲我覺得它是一種有趣的語言。作爲一種習慣,我想用模板創建一個簡單的Vector類,這不是很難。但是,我遇到了一個問題。在我的基本向量類中使用數組作爲模板參數
我已經創建了下面的模板類:
template <typename T>
class Vector
{
public:
Vector(int length);
~Vector(void);
int getLength();
T& operator[] (const int index);
private:
T *_items;
int _count;
};
template <typename T>
Vector<T>::Vector(int length)
{
_items = new T[length];
_count = length;
}
template <typename T>
T& Vector<T>::operator[](const int index)
{
if (index >= getLength() || index < 0)
throw exception("Array out of bounds.");
return _items[index];
}
所有的功能都實現,但他們不相關的我的問題,所以我在這裏沒有複製它們。
該類按預期工作,但有一個例外: 如果我想創建一個數組的向量,它不起作用。 例如: -
Vector<int[2]> someVector(5);
我明明想的是,Vector類的_items屬性將是int [5] [2]。但是,由於編譯器將'T'替換爲'int [2]',_items屬性將爲int [2] [5](或者至少,這是我從調試中瞭解到的,如果我錯了,請糾正我的錯誤)。結果,[]運算符不再正常工作,因此這個整個類對於數組沒有用處。
有沒有辦法解決這個問題,讓這個類也適用於數組?如果這是不可能的,有沒有辦法阻止這個類被數組初始化?
編輯:謝謝你迄今爲止的所有迴應。但是,我可能不完全清楚我的問題。首先,我創建了這個類來習慣C++,我知道有一個std :: vector類,而且現在我最好使用矢量向量。這不是真的問題。我只想更好地理解模板,並且通常使用C++,所以我想知道如何處理這類問題。我希望能夠創建不會導致程序崩潰的類。如果我或者其他人現在會使用這個類並且試圖使用原始數組而不是向量來創建這個類,那麼程序會因爲數組錯誤而崩潰(Vector(y)變成int [x] [y ]而不是內部的int [y] [x])。所以我想要一個解決方案,它可以創建正確的數組,或者防止矢量被數組初始化。
確保你有[一本好的入門C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。學會在不理解語言基礎的情況下編寫出色,正確,無錯的C++代碼是非常非常困難的。 –
「使用不太難的模板」 - 如果您正在討論製作自己的模板類/函數,那麼「模板」和「不太難」不會真正適合同一句話。這很棘手。 – Mat
要添加到Mat的評論:模板可以很難,特別是如果你想讓他們迎合非基本類型(如你的int [2]對象)。他們不是一個很好的學習C++的方法,並且這不是一個很好的例子,可以從優秀的STL Vector對象中學習。 – Pete855217