如何编写返回数组引用的 C++ 转换运算符?

2024-04-09

在 C++ 中,可以在类或结构中添加隐式转换运算符。例如,3D 矢量类型通常包括以下内容:

struct Vector {
    float x, y, z;
    operator float * () { return reinterpret_cast<float *>(this); }
};

允许使用下标访问向量的元素,传递给需要指针的函数等。我突然想知道:我们可以编写一个转换运算符来返回对浮点数组的引用,而不是返回浮点指针吗?

(这纯粹是学术兴趣。我不知道数组的引用比简单的指针有什么好处(如果有的话)。)

作为一个自由函数,我们可以这样做:

float (&convert(Vector & v))[3]
{
    return reinterpret_cast<float(&)[3]>(v);
}

Vector v;
convert(v);

但是,我一直无法找到正确的语法来作为转换运算符来执行此操作。我尝试过类似的事情:

operator float(&)[3] ()
operator float(&())[3]
float (&operator())[3]

和各种其他排列,但我只是得到各种语法错误(g++ 4.8.1)。

是否可以编写一个返回数组引用的转换运算符,如果可以,这样做的语法是什么?


事实上你可以,你几乎已经完成了最后一个:

(&operator float())[3];

至于 typedef 是否有必要的问题,我认为这是通过阅读评论而来的https://stackoverflow.com/a/675576​​0/2925619 https://stackoverflow.com/a/6755760/2925619(这个答案也帮助我获得了上述语法)。

Edit:

显然,这种语法是不正确的,正如 chris 为我们发现的那样,返回对数组的引用是被禁止的。我想你只需要满足于typedef.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写返回数组引用的 C++ 转换运算符? 的相关文章

随机推荐