我想为我的类实现一个Swap()方法(让我们称之为A)来创建copy-and-swap operator =().据我所知,交换方法应该通过交换类的所有成员来实现,例如:
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,file); A tmp(read_a); this->Swap(tmp); } private: const size_t a; };
A a; FILE* f = fopen(...); a.Deserialize(f);
对于这种模糊的措辞,我很抱歉.
解决方法
经过一夜好眠后,我认为最好的答案是使用一个指向const值的非const指针 – 在所有这些都是你想要捕获的语义之后.