右值中的代理类-如何实现赋值运算符



假设我有一个简单的向量类,其中的元素是通过代理类访问的。

矢量类别:

class vec {
public:
    vec(int len) {
        length = len;
        data = new double [len];
    }
    proxy operator[](int i) {
        if (i >= 0 && i < length) {
            return proxy(i, data);
        }
        else {
            std::cerr << "AHHHH!n";
            exit(1);
        }
    }
private:
    int length;
    double * data;
};

代理类:

class proxy {
public:
    proxy(int i, double * d) {
        index = i;
        data  = d;
    }
    void operator=(double rhs) {
        data[index] = rhs;
    }
private:
    int index;
    double * data;
};

如何将向量(或者更确切地说,从代理(中的元素分配给double类型的变量换句话说,我如何完成以下任务:

int main() {
    vec a(2);
    double x = 3.14;
    a[0] = x; // Works!
    x = a[0]; // How to make work?
    return 0;
}

不幸的是,我不能写这样的东西:

friend double operator=(double & lhs, const proxy & p) { ... }

因为CCD_ 1必须是成员。

为代理类添加一个转换函数:

class proxy
{
public:
    operator double() const { return data[index]; }
    // ...
};

最新更新