По сути, я пытаюсь создать шаблон карты / словарь класса для 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 в функцию перегрузки оператора?
Я только нашел объяснения, кратко описывающие решения, и не могу следовать.
Пожалуйста, просветите меня.
Все, что вам нужно сделать, это исправить свои подписи следующим образом:
const T& operator [](char* b) const;
T& operator [](char* b);
Я удалил const
классификатор от второго оператора.
если я использую
AssArray["llama"]=T
Как я должен получить значение T в функцию перегрузки оператора?
Вы не Вы просто возвращаете ссылку на то, где должно храниться новое значение, а остальное позаботится компилятор. Если "llama"
не существует в массиве, вам нужно создать для него запись и вернуть ссылку на эту запись.
Так как оператор [] возвращает ссылку на T, если вы хотите сказать assArray [«str»] = T, тип T должен знать, что делать с оператором =. Если T не имеет перегруженного оператора =, вы должны перегрузить оператор = в типе T.
Оператор [] не имеет ничего общего с присваиваниями. Он должен просто вернуть элемент по указанному индексу.