Как сделать метод const и неconst одновременно? [закрыт]

118
22 апреля 2022, 10:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

Пишу свою структуру данных в виде шаблона struct. В ней должен быть помимо прочего метод front() для обращения к определенному элементу.
Проблема в том, что этот метод нужен и для сравнения этого элемента с внешними (возврат значения из функции по константной ссылке) и для присвоения элементу значения (возврат из функции обычной ссылки). Я пробовал писать два метода, либо вложенную структуру которая съедает круглые скобочки и переопределяет оператор присваивания. Получалась какая-то лажа. Покажите какую-нибудь каноничную реализацию такого.

#include <cstddef>
template <typename T, std::size_t MaxElements>
struct cb{
T buffer[MaxElements];
// Тут реализация метода front() который возвращает buffer[0]
};
int main(){cb<int,7>cc;cc.front()=0;if(cc.front()==0){};return 0;};
Answer 1

Написать две функции-члена. Одну для const обьектов, вторую для обычных обьектов.

T& front()
{
    return buffer[0];
}
const T& front() const
{
    return buffer[0];
}

P.S. Не забудьте написать нужные проверки в этих функциях.

READ ALSO
Спящий парикмахер

Спящий парикмахер

Помогите разобраться как реализовать задачу "Спящий парикмахер", используя обмен сообщениями: Send и RecvРазобрался, как реализовать через...

157
Ошибка Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) Xcode c++

Ошибка Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) Xcode c++

Есть программа, ошибку выдает после прохождения функции mat1, при присваивании A[i] значение функции

133
Не работает простейший алгоритм

Не работает простейший алгоритм

Есть простейший алгоритм на c++, который заполняет и выводит двухмерный динамический массив числами от 1 до n*m, но не работает с некоторыми...

157
Как в конструкторе класса инициализировать поле класса, являющееся объектом и созданное на стеке?

Как в конструкторе класса инициализировать поле класса, являющееся объектом и созданное на стеке?

Как в конструкторе класса инициализировать поле класса, являющееся объектом класса и созданное на стеке? Следующий код вызывает ошибку

97