Как написать оператор преобразования C ++, возвращающий ссылку на массив?
В C ++ можно добавить операторы неявного преобразования в класс или структуру. Например, 3D векторные типы обычно включают в себя что-то вроде:
struct Vector {
float x, y, z;
operator float * () { return reinterpret_cast(this); }
};
разрешить доступ к векторуs элементы с индексами, передача функций, которым нужен указатель, и т. д. Мне пришло в голову удивление: можем ли мы вместо этого написать оператор преобразования, который возвращает ссылку на массив с плавающей точкой, вместо указателя на с плавающей точкой?
(Это чисто академический интерес. Я нене знаю, какие преимущества будет иметь ссылка на массив, если таковая имеется, по сравнению с простым указателем.)
В качестве бесплатной функции мы можем сделать это следующим образом:
float (&convert(Vector & v))[3]
{
return reinterpret_cast(v);
}
Vector v;
convert(v);
Тем не менее, я неЯ не смог найти правильный синтаксис, чтобы сделать это как оператор преобразования. Я'мы пробовали такие вещи, как:
operator float(&)[3] ()
operator float(&())[3]
float (&operator())[3]
и различные другие перестановки, но я просто получаю различные синтаксические ошибки (g ++ 4.8.1).
Можно ли написать оператор преобразования, возвращающий ссылку на массив, и если да, то каков синтаксис для этого?