Как написать оператор преобразования C ++, возвращающий ссылку на массив?
В 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).
Можно ли написать оператор преобразования, возвращающий ссылку на массив, и если да, то каков синтаксис для этого?