重载c++中的下标[]操作符来设置类(量词)的大小

Overloading the Subscript[] operator in C++ to set the size of a class(quantifier).

本文关键字:量词 设置 操作符 c++ 下标 重载      更新时间:2023-10-16

大家好。

我有以下结构和类,

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]就像任何数组

你不能。但是,你几乎可以这样做:用圆括号初始化它,而不是用方括号:

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

如果编译器允许你在对象构造函数中使用括号,它怎么知道你是想创建一个大小为30的NCA还是一个包含30个NCA对象的数组呢?c++不允许重写括号语法,除非在已经有对象的情况下将其作为操作符。

这不是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;
}

你不能。

你只能这样使用:

NCA n(30);