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

发布于 2024-12-09 17:33:12 字数 438 浏览 0 评论 0原文

美好的一天,伙计们。

我有以下结构和类,

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

Good day guys.

I have the following struct and class,

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

I would like to instantiate the class with a size

ie. NCA[30] as one would any array

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

晨曦÷微暖 2024-12-16 17:33:12

你不能。但是,您可以做几乎类似的事情:用括号初始化它,而不是方括号:

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

You can't. But, you can do something almost like that: initialize it with parenthesis, but not brackets:

NCA<int> myList(30);

Implement it like so:

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());
}
初心 2024-12-16 17:33:12

如果编译器允许您在对象构造函数中使用括号,它如何知道您是要尝试创建大小为 30 的 NCA 还是大小为 30 NCA 的数组物体? C++ 不允许您覆盖括号语法,除非您已经拥有对象后作为运算符。

If the compiler were to allow you to use brackets in your object constructor, how would it know whether you were trying to make an NCA of size 30 or an array of 30 NCA objects? C++ does not allow you to override the bracket syntax, except as an operator once you already have an object.

家住魔仙堡 2024-12-16 17:33:12

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

That's not quite how operator[] works.

When you write NCA[30] you're writing type[30], where as to use operator[] you need an instance:

NCA inst;
inst[30];

What you can do though is use an integer template parameter to specify the size, e.g.:

#include <utility>

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

int main() {
  NCA<1024> instance;
}
辞取 2024-12-16 17:33:12

你不能。

您只能使用 ctor 来执行此操作,如下所示:

NCA n(30);

You can't.

You can only use the ctor to do it like:

NCA n(30);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文