Я хочу реализовать метод Swap () для моего класса (назовем его A), чтобы сделать оператор copy-and-swap = (). Насколько я знаю, метод swap должен быть реализован путем замены всех членов класса, например:
class A
{
public:
void swap(A& rhv)
{
std::swap(x, rhv.x);
std::swap(y, rhv.y);
std::swap(z, rhv.z);
}
private:
int x,y,z;
};
Но что мне делать, если у меня есть постоянный член? Я не могу вызвать std :: swap для этого, поэтому я не могу кодировать A :: Swap ().
РЕДАКТИРОВАТЬ: На самом деле мой класс немного сложнее. Я хочу сериализировать и десериализовать это. Член Const - это фрагмент данных, который не изменится (например, его идентификатор) в этом объекте. Поэтому я подумал написать что-то вроде:
class A
{
public:
void Serialize(FILE* file) const
{
fwrite(&read_a, 1, sizeof(read_a), file);
}
void Deserialize(FILE* file) const
{
size_t read_a;
fread(&read_a, 1, sizeof(read_a), file);
A tmp(read_a);
this->Swap(tmp);
}
private:
const size_t a;
};
и назовите этот код:
A a;
FILE* f = fopen(...);
a.Deserialize(f);
Прошу прощения за такую расплывчатую формулировку.