簡體   English   中英

如何在C ++中為固定大小的數組類創建模板定義?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM