基本上,我正在尝试为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)。
这样做非常简单,只需循环通过etc,真正的问题是运算符;
如果我使用AssArray"llama"= T,我应该如何将T的值放入操作符重载函数?
我只找到了简要描述解决方案的解释,并不能真正遵循。
请给我开导一下。
发布于 2013-02-13 04:17:23
你所要做的就是像这样纠正你的签名:
const T& operator [](char* b) const;
T& operator [](char* b);我已经从第二个操作符中删除了const限定符。
如果我使用AssArray["llama"]=T,我应该如何将T的值放入操作符重载函数中?
?
你不需要这样做,你只需要返回一个新值应该存储在哪里的引用,然后编译器会处理剩下的事情。如果数组中不存在"llama",则需要为其创建一个条目,并返回对该条目的引用。
发布于 2013-02-13 04:29:29
由于operator[]返回一个对T的引用,如果您想说assArray"str“=T,那么类型T必须知道如何处理这个operator=。如果T没有重载operator=,则必须重载类型T中的operator=。
operator[]与赋值无关。它应该只返回给定索引处的元素。
https://stackoverflow.com/questions/14840885
复制相似问题