Como escrever um operador de conversão C ++ retornando referência a matriz?
Em C ++, pode-se adicionar operadores de conversão implícita em uma classe ou estrutura. Por exemplo, os tipos de vetor 3D geralmente incluem algo como:
struct Vector {
float x, y, z;
operator float * () { return reinterpret_cast<float *>(this); }
};
para permitir acessar os elementos do vetor com subscritos, passando para funções que querem um ponteiro, etc. Ocorreu-me perguntar: podemos, em vez disso, escrever um operador de conversão que retorna uma referência à matriz float, em vez de um ponteiro para float?
(Isso é de interesse puramente acadêmico. Eu não sei o que beneficia uma referência para matriz teria, se houver, sobre um ponteiro simples.)
Como uma função livre, podemos fazer isso como:
float (&convert(Vector & v))[3]
{
return reinterpret_cast<float(&)[3]>(v);
}
Vector v;
convert(v);
No entanto, não consegui encontrar a sintaxe correta para fazer isso como um operador de conversão. Eu tentei coisas como:
operator float(&)[3] ()
operator float(&())[3]
float (&operator())[3]
e várias outras permutações, mas acabei de receber vários erros de sintaxe (g ++ 4.8.1).
É possível escrever um operador de conversão retornando uma referência a matriz e, em caso afirmativo, qual é a sintaxe para fazer isso?