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);
};

我想实例化一个大小的类

IE。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 回答