Russian Qt Forum
Сентябрь 30, 2024, 18:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как добавить в список класс с константными полями  (Прочитано 2632 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Декабрь 07, 2015, 09:24 »

Код:
class A {
  const uint b;
public:
  A(uint c):b(c){}};

        QList<A> a;
        a<<A(20); // ошибка: non-static const member 'const uint A::b', can't use default assignment operator class A
Как нибудь это можно сделать? Оператор копирования по идее тоже не поможет, константы хотят в конструкторе объявления.

p.s. можно конечно проигнорить const добавив функцию, но как то все это некрасиво - ради const еще оператор копирования городить.
A& operator=(const A& other) {*(uint*)&b = other.b; return *this;}
« Последнее редактирование: Декабрь 07, 2015, 09:51 от deMax » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Декабрь 07, 2015, 10:37 »

На все вопросы с константностью ответ всегда один, типа "а вы ее уберите"  Улыбающийся

По смыслу какого-то легального способа быть не должно. Объявили "const" - получите проблемы с копированием, это нормально. Поэтому вместо такого (понтового) объявления лучше разрисовать геттеры/сеттеры (здесь это к месту)
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Декабрь 07, 2015, 14:52 »

Сделайте b приватным мембером (я не люблю приваты, но это, наверное, как раз тот случай).
И проследите, чтобы никакие методы вашего класса его не меняли.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #3 : Декабрь 07, 2015, 16:20 »

Так у меня const для приватных членов класса, например size для кольцевого буфера.
p.s. для пустого оператора присваивания значение b копируется, по крайней мере оно правильное. т.е. *(uint)&b =other.b; необязательно что ли?
A &operator=(const &A other) {return *this;}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 08, 2015, 05:10 »

Так у меня const для приватных членов класса, например size для кольцевого буфера.
Есть такая альтернатива
Код
C++ (Qt)
template <size_t buf_size>
class MyBuf {
MyBuf( void ) : m_buffer(buf_size) {}
..
};
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.063 секунд. Запросов: 23.