クラスに Swap() メソッドを実装して (A と呼びましょう)、copy-and-swap operator=() を作成したいと考えています。私の知る限り、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;
};
しかし、const メンバーがある場合はどうすればよいでしょうか? std::swap を呼び出すことができないため、A::Swap() をコーディングできません。
編集: 実際、私のクラスはもう少し複雑です。私はそれをシリアライズおよびデシリアライズしたい。Const メンバーは、このオブジェクト内で変更されないデータ (ID など) です。だから私は次のようなものを書くことを考えていました:
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);
あいまいな表現で申し訳ありません。