首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中重载模板类的[]运算符get和set

在c++中重载模板类的[]运算符get和set
EN

Stack Overflow用户
提问于 2013-02-13 04:08:43
回答 2查看 3K关注 0票数 1

基本上,我正在尝试为c++创建模板映射/字典类(我知道这已经完成了,假设我是受虐狂)。

我开始写这个框架:

代码语言:javascript
复制
#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)。

这样做非常简单,只需循环通过etc,真正的问题是运算符;

如果我使用AssArray"llama"= T,我应该如何将T的值放入操作符重载函数?

我只找到了简要描述解决方案的解释,并不能真正遵循。

请给我开导一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-13 04:17:23

你所要做的就是像这样纠正你的签名:

代码语言:javascript
复制
const T& operator [](char* b) const;
T& operator [](char* b);

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

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

你不需要这样做,你只需要返回一个新值应该存储在哪里的引用,然后编译器会处理剩下的事情。如果数组中不存在"llama",则需要为其创建一个条目,并返回对该条目的引用。

票数 1
EN

Stack Overflow用户

发布于 2013-02-13 04:29:29

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14840885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档