如何为自定义结构创建operator=

问题描述 投票:0回答:1

我有带有 std::map 字段的自定义类。

template <typename T>
struct ProxyMap {
    auto begin() { return m.begin(); }
    auto end() { return m.end(); }
private:
    std::map<size_t, T> m;
}

main () {
    ProxyMap<int> pm;
    pm[0] = -1;
    pm[3] = 23;
    pm[63] = 0;
    for (auto c : pm) {
        size_t a;
        int b;
        std::tie(a,b) = c;
        std::cout << a << " " << b << "\n";
    }
    return 0;
}

我必须做什么才能很好地编译这个例子?我需要什么运算符或 mb 另一个函数,例如转换为类型??

我只是重新实现 begin() end() 方法

c++ operators
1个回答
0
投票

您的标题询问的是

operator=
,但该运算符并不是您的代码中缺少的内容。 要使代码编译,您需要实现
operator[]
,并让它调用
map::operator[]
,例如:

template <typename T>
struct ProxyMap {
    auto begin() { return m.begin(); }
    auto end() { return m.end(); }

    T& operator[](size_t key) { return m[key]; } // <-- HERE

private:
    std::map<size_t, T> m;
};

int main () {
    ProxyMap<int> pm;
    pm[0] = -1;
    pm[3] = 23;
    pm[63] = 0;
    for (auto c : pm) {
        size_t a;
        int b;
        std::tie(a,b) = c;
        std::cout << a << " " << b << "\n";
    }
    return 0;
}

在线演示

© www.soinside.com 2019 - 2024. All rights reserved.