Надеюсь, это не дубликат. Если это так, пожалуйста, укажите мне на это в комментарии, и я снова удалю вопрос.
У меня есть объект данных с данными, которые действительны только в пакете, т. е. нет смысла изменять значение одного члена, не делая недействительными другие элементы.
Этот объект данных описывает некоторую информацию об изображении:
struct ImageInfo
{
ImageInfo(const double &ppix, ...)
: PpiX(ppix),
...
{ }
const double PpiX;
const double PpiY;
const int SizeX;
const int SizeY;
};
В моем объекте изображения у меня есть неконстантный элемент типа ImageInfo
:
class MyImageObject
{
...
private:
ImageInfo mMyInfo;
}
Я хочу иметь возможность изменять mMyInfo
во время выполнения, но только так, чтобы он принимал новый экземпляр ImageInfo(...).
В функции MyImageObject::Load()
я хотел бы прочитать эти данные из информации о файле, а затем создать экземпляр ImageInfo
с правильным набором данных:
double ppix = ImageFile.GetPpiX();
...
mMyInfo = ImageInfo(ppix, ...);
Но мне не удалось написать допустимый оператор присваивания (Конструктор копирования возможен). Мое решение оставило mMyInfo
пустым, потому что я не ссылался на this
:
ImageInfo operator=(const ImageInfo &other)
{
// no reference to *this
return ImageInfo(other);
}
Из любопытства я хотел бы знать, как должен выглядеть оператор присваивания для такого класса.
Я использую простой C++.
ИЗМЕНИТЬ
Возможные решения (цель состоит в том, чтобы данные были переносимыми, но связными):
- Используйте закрытые члены вместе с
Get...()
функциями -> просто, но я бы хотел избежать круглых скобок. - Сохраните указатель на ImageInfo:
ImageInfo *mpMyInfo;
(я бы хотел избежать кучи.) - Используйте сериализацию и сохраните сериализованный ImageInfo, а затем создайте локальные экземпляры из сериализованных данных.
const
для начала? - person   schedule 11.06.2013const
, им нужно бытьreadonly
. Ноreadonly
существует вC#
, но не вC++
. - person Martin Hennings   schedule 11.06.2013const
илиreadonly
, вы, очевидно, хотите изменить эти значения с течением времени, так зачем заявлять, что они не меняются? - person   schedule 11.06.2013