在C++中重载Subscript []运算符以设置类的大小(量词).

Aid*_*dom 1 c++ overloading subscript-operator

美好的一天.

我有以下结构和类,

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);
};
Run Code Online (Sandbox Code Playgroud)

我想实例化一个大小的类

即.NCA [30]就像任何数组一样

Rob*_*obᵩ 6

你不能.但是,你可以做类似的事情:用括号初始化它,但不是括号:

NCA<int> myList(30);
Run Code Online (Sandbox Code Playgroud)

像这样实现它:

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());
}
Run Code Online (Sandbox Code Playgroud)

  • 构造函数应该是`explicit`以避免`size_t`自动转换为`NCA`. (3认同)

Mar*_*som 5

如果编译器允许你在对象构造函数中使用括号,它将如何知道你是在尝试制作NCA大小为30还是30个NCA对象的数组?C++不允许您覆盖括号语法,除非作为运算符,一旦您已有对象.