gpt4 book ai didi

c++ - 如何为类编写转换为引用到数组的运算符?

转载 作者:行者123 更新时间:2023-11-30 04:38:14 25 4
gpt4 key购买 nike

我有以下类(class):

template <size_t size>
class Araye{
public:
Araye(int input[]){
for (int i=0;i<size;i++)
araye[i]=input[i];
}
int araye[size];
};

我应该如何为此类编写一个强制转换为引用到数组的运算符,以便以下工作:

int adad[3]={1,2,3};
Araye<3> araye(adad);
int (&reference)[3]=araye;

最佳答案

template <size_t size> class Araye {
public:
typedef int (&array_ref)[size];
operator array_ref () { return araye; }
// ...

或者使用 identity(感谢 Johannes):

operator typename identity<int[size]>::type &() { return araye; }

有了你的例子,但我更喜欢下面的声明:

Araye<3>::array_ref reference = araye;  

通常不需要这样做,因为下标运算符应该满足大多数需求:

int& operator[](size_t i) { return araye[i]; }

请注意,如果您同意将类限制为聚合,则可以将样本缩短为以下内容:

template <size_t size> struct Araye {
int araye[size];
typedef int (&array_ref)[size];
operator array_ref () { return araye; }
};

Araye<3> araye = {1,2,3};
Araye<3>::array_ref reference = araye;

关于c++ - 如何为类编写转换为引用到数组的运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com