在 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/6755760/2925619 https://stackoverflow.com/a/6755760/2925619(这个答案也帮助我获得了上述语法)。
Edit:
显然,这种语法是不正确的,正如 chris 为我们发现的那样,返回对数组的引用是被禁止的。我想你只需要满足于typedef
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)