1

基本上,我正在尝试为 C++ 制作模板映射/字典类(我知道这已经完成,假设我是自虐狂)。

我开始写这个骨架:

#pragma once
template <class T>
class AssArray
{
    int _size;
    int _position;

public:
    AssArray(int size);
    ~AssArray(void);

    const T& operator [](char* b) const;
    T& operator [](char* b) const;
        //I read this should be done sth like this when researching, though an explanation would be nice.
};

现在,我需要能够获取 (T=AssArray["llama"])、设置 (AssArray["llama"]= T) 和覆盖 (AssArray["llama"]= newT)。

这样做很简单,只需循环等,这里真正的问题是操作符;

如果我使用 AssArray["llama"]= T,我应该如何将 T 的值放入运算符重载函数中?

我只找到了简要描述解决方案的解释,并不能真正理解。
请赐教。

4

2 回答 2

1

您所要做的就是更正您的签名,如下所示:

const T& operator [](char* b) const;
T& operator [](char* b);

我已经const从第二个运算符中删除了限定符。

如果我使用AssArray["llama"]=T,我应该如何将 T 的值放入运算符重载函数中?

你没有。您只需返回一个对应该存储新值的位置的引用,编译器将处理其余部分。如果"llama"数组中不存在,则需要为其创建一个条目,并返回对该条目的引用。

于 2013-02-12T20:17:22.710 回答
0

由于 operator[] 如果你想说 assArray["str"] = T 返回一个对 T 的引用,那么类型 T 必须知道如何处理 operator=。如果 T 没有重载 operator=,则必须在类型 T 中重载 operator=。

operator[] 与赋值无关。它应该只返回给定索引处的元素。

于 2013-02-12T20:29:29.010 回答