Перегрузка оператора [] шаблонного класса, get и set, в Stack Overflow

По сути, я пытаюсь создать шаблон карты / словарь класса для 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 в функцию перегрузки оператора?

Я только нашел объяснения, кратко описывающие решения, и не могу следовать.
Пожалуйста, просветите меня.

1

Решение

Все, что вам нужно сделать, это исправить свои подписи следующим образом:

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

Я удалил const классификатор от второго оператора.

если я использую AssArray["llama"]=TКак я должен получить значение T в функцию перегрузки оператора?

Вы не Вы просто возвращаете ссылку на то, где должно храниться новое значение, а остальное позаботится компилятор. Если "llama" не существует в массиве, вам нужно создать для него запись и вернуть ссылку на эту запись.

1

Другие решения

Так как оператор [] возвращает ссылку на T, если вы хотите сказать assArray [«str»] = T, тип T должен знать, что делать с оператором =. Если T не имеет перегруженного оператора =, вы должны перегрузить оператор = в типе T.

Оператор [] не имеет ничего общего с присваиваниями. Он должен просто вернуть элемент по указанному индексу.

0

По вопросам рекламы [email protected]