c – 使用const成员的交换方法

前端之家收集整理的这篇文章主要介绍了c – 使用const成员的交换方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想为我的类实现一个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指针 – 在所有这些都是你想要捕获的语义之后.

猜你在找的C&C++相关文章