[英]How do you create a template definition for a fixed-size array class in C++?
我需要創建一個模板,因為我不知道它是一個數組。 它必須具有在構造函數中傳遞的大小。 所以這就是我所得到的,並且我遇到了各種各樣的錯誤。 我是C ++的初學者,因此可以提供任何幫助:)
template <typename T, int N>
class Array
{
public:
T& operator[](int index)
{
return data[index];
}
private:
int size;
T *data[N];
};
我認為您了解我正在嘗試做的事情。 如您所見,我還需要重載下標運算符。 不知道我是否需要引用或指針或什么。 我確實有一個構造函數,但是它不能正常工作。
這是一個帶有示例主代碼的更正版本:
#include <iostream>
using namespace std;
template <typename T, int N>
class Array
{
public:
T& operator[](int index)
{
// add check for array index out of bounds i.e. access within 0 to N-1
return data[index];
}
Array() {
data = new T[size = N];
}
~Array() {
if (data)
delete [] data;
}
private:
int size;
T *data;
};
int main(void) {
Array<int, 4> a;
a[0] = 5;
cout << a[0] << endl;
return 0;
}
從我可以看到,您的模板包含一個指針數組,從我閱讀的內容以及您的[]運算符實現中,它們並不是您打算做的。 所以首先您應該從中刪除*
T *data[N];
您可能應該從構造函數初始化模板的大小,因此應更改:
T *data[N];
至 :
T* data;
和:
template <typename T, int N>
至 :
template<typename T>
現在已經稍微改變了實現,現在應該編寫一個類似的構造函數:
template<typename T>
Array(int n) {
data = new T[n];
}
現在您還應該添加一個析構函數,例如:
~Array() {
delete[] data;
}
然后你去:)
但是,如果要將大小保留為模板的參數,則構造函數將如下所示:
template<typename T, int N>
Array() {
}
和數據聲明:
T data[N];
如評論中所述,您可能想在“現實生活”條件下使用std :: array,但是作為培訓,實現自己的Array是一件好事,畢竟這是大多數計算機學校都要做的培訓。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.