我有一个uni任务,我必须创建一个自定义模板,作为双打数组。它还必须实现一种排序算法,该算法按降序对元素进行排序。我设计了模板,因此它有一个内部的双精度数组,其长度由用户声明(MyArray< 10>包含一个长度为10的双数组)。我的自定义数组只会从myArr [0]按升序填充双精度值,并且一旦分配,值就不会更改,但它们可以是任何值,因此我无法使用魔法常量来跟踪它们。相反,我必须检查数组的赋值数,所以当我调用sort()方法时,它知道哪个是最后一个更改的元素。
我的下标操作员:
Proxy &operator[](int elem) {
if(elem > arr_size - 1) {
throw std::out_of_range("Out of range");
}
std::cout << "a" << std::endl;
return Proxy(*this, elem);
}
F8类中的代理类:
class Proxy {
private:
F8 &a;
int id;
public:
Proxy(F8 &a, int id) { this.a = a; this.id = id; };
int& operator=(int x) { curr_num++; return a.arr[id]; }
};
有没有办法检查operator []是否在一个赋值中(或者它是一个左值)?我用代理类尝试过它但对初学者来说似乎太复杂了C ++类和那种方式我必须实现所有的运算符(值得到比较等,所以当使用operator []我返回一个double它可以直接比较,但是当我返回Proxy类时,编译器给出了一个错误每个操作符因为它们不存在而且任务不要求我实现比较所需的所有操作符。
感谢您的时间!
编辑:当我尝试返回一个可以跟踪赋值运算符的代理类时,出现以下错误:
error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'F8<433>::Proxy')
另外要明确:数组将按索引的升序填充,因此在为myArr [0]分配值后,myArr [1]会出现。
答案 0 :(得分:1)
我觉得我在寻找用户定义的转换。
class Proxy {
private:
F8 &a;
int id;
public:
Proxy(F8 &a, int id) { this.a = a; this.id = id; };
int& operator=(int x) { curr_num++; return a.arr[id]; }
operator int() const { return a.arr[id]; }
// ^ int or double? You say double but your example code seems to be using int.
};
不确定您的赋值运算符应该如何操作。现在它只返回你的数组中的一个值,但实际上没有分配任何东西。
像
这样的东西int& operator=(int x) { curr_num++; a.arr[id]=x; return a.arr[id]; }