右值中的代理 class - 如何实现赋值运算符?
proxy class in rvalue - how to implement assignment operator?
假设我有一个简单的向量 class,其中的元素通过代理 class 访问。
向量class:
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:
class proxy {
public:
proxy(int i, double * d) {
index = i;
data = d;
}
void operator=(double rhs) {
data[index] = rhs;
}
private:
int index;
double * data;
};
如何将向量(或代理)中的元素分配给双精度类型的变量?换句话说,我如何完成以下操作:
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) { ... }
因为 operator=
必须是会员。
为您的代理添加转换功能class:
class proxy
{
public:
operator double() const { return data[index]; }
// ...
};
假设我有一个简单的向量 class,其中的元素通过代理 class 访问。
向量class:
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:
class proxy {
public:
proxy(int i, double * d) {
index = i;
data = d;
}
void operator=(double rhs) {
data[index] = rhs;
}
private:
int index;
double * data;
};
如何将向量(或代理)中的元素分配给双精度类型的变量?换句话说,我如何完成以下操作:
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) { ... }
因为 operator=
必须是会员。
为您的代理添加转换功能class:
class proxy
{
public:
operator double() const { return data[index]; }
// ...
};