1

良い一日のみんな。

私は次の構造体とクラスを持っています、

template <class T>
struct Node
{
    T DataMember;
    Node* Next;
};

template <class T>
class NCA
{
    public:
        NCA();
        ~NCA();
        void push(T);
        T pop();
        void print();
        void Clear();
    private:
        Node<T>* Head;
        void* operator new(unsigned int);
};

サイズでクラスをインスタンス化したい

すなわち。他のアレイと同じようにNCA[30]

4

4 に答える 4

6

できません。ただし、ほぼそのようなことを行うことができます。括弧で初期化しますが、角かっこでは初期化しません。

NCA<int> myList(30);

次のように実装します。

template <class T>
class NCA
{
  ...
  public:
    explicit NCA(std::size_t count);
  ...
 };

template <class T>
NCA<T>::NCA(std::size_t count) {
  ... allocate Head, &c ...
  while(count--)
    push(T());
}
于 2011-10-13T18:43:34.533 に答える
5

コンパイラがオブジェクトコンストラクタで角かっこを使用できるようにする場合、NCAサイズが30のオブジェクトを作成しようとしていたのか、30のNCAオブジェクトの配列を作成しようとしていたのかをどのように判断しますか?C ++では、すでにオブジェクトを持っている場合を除いて、ブラケット構文をオーバーライドすることはできません。

于 2011-10-13T18:47:47.490 に答える
3

それは完全に機能する方法ではありませんoperator[]

あなたが書くとき、あなたは書いNCA[30]ていますtype[30]、どこで使うのかあなたはインスタンスoperator[]を必要とします:

NCA inst;
inst[30];

ただし、整数のテンプレートパラメータを使用してサイズを指定することができます。例:

#include <utility>

template <std::size_t N>
class NCA {
  char bytes[N];
};

int main() {
  NCA<1024> instance;
}
于 2011-10-13T18:40:58.093 に答える
1

できません。

ctorは、次のようにのみ使用できます。

NCA n(30);
于 2011-10-13T18:40:30.003 に答える