作者:teddy213 | 来源:互联网 | 2022-11-21 19:27
我需要编写一个包装类,为数据类的字段提供"get"方法.但是,我不知道编写"getter"来返回2D数组的语法.例如:
#include
class Data {
public:
double array[2][2];
};
class Wrapper {
private:
Data* dataptr;
public:
Wrapper(Data* data) : dataptr(data) {}
// compile error: "cannot convert ‘double (*)[2]’ to ‘double**’ in return"
double** getarray() { return dataptr->array; }
// compile error: "‘getarray’ declared as function returning an array"
//double* getarray()[2] { return dataptr->array; }
// this works, but what is auto resolved to?
//auto getarray() { return dataptr->array; }
};
int main() {
Data d;
d.array[0][0] = 1;
d.array[0][1] = 2;
d.array[1][0] = 3;
d.array[1][1] = 4;
Wrapper w(&d);
auto arr = w.getarray();
return 0;
}
我知道有可能将方法返回类型设置为auto,并按预期编译和运行.但我不知道如何使用显式返回类型编写方法.
在我的真实世界示例中,我无法修改Data类,因此切换到使用std :: vector不是一个选项.
1> Lightness Ra..:
错误消息告诉您类型!棘手的部分是语法:
double (*getarray())[2] { return dataptr->array; }
换句话说,你几乎拥有它,但你需要*
使用括号将它绑定得更紧.
您可以避免最外层维度的衰减:
double (&getarray())[2][2] { return dataptr->array; }
或者您可以将此类型放入别名以避免混乱.
或者您可以使用auto
,或切换到std::array
更容易:P
#include
#include
class Data {
public:
using ArrayType = std::array, 2>;
ArrayType array;
};
class Wrapper {
private:
Data* dataptr;
public:
Wrapper(Data* data) : dataptr(data) {}
Data::ArrayType& getarray() { return dataptr->array; }
};
int main() {
Data d;
d.array[0][0] = 1;
d.array[0][1] = 2;
d.array[1][0] = 3;
d.array[1][1] = 4;
Wrapper w(&d);
auto arr = w.getarray();
return 0;
}