C ++ Operator Ambiguity
Простите меня, потому что я довольно новичок в C ++, но у меня возникли проблемы с неоднозначностью операторов. Я думаю, что это зависит от компилятора, для кода, скомпилированного на моем рабочем столе. Тем не менее, он не может скомпилировать на моем ноутбуке. Я думаю, что знаю, что происходит не так, но я не вижу элегантного способа обойти это. Пожалуйста, дайте мне знать, если я делаю очевидную ошибку. Во всяком случае, вот что я пытаюсь сделать:
Я сделал свой собственный векторный класс под названием Vector4, который выглядит примерно так:
class Vector4
{
private:
GLfloat vector[4];
...
}
Тогда у меня есть эти операторы, которые вызывают проблемы:
operator GLfloat* () { return vector; }
operator const GLfloat* () const { return vector; }
GLfloat& operator [] (const size_t i) { return vector[i]; }
const GLfloat& operator [] (const size_t i) const { return vector[i]; }
У меня есть оператор преобразования, так что я могу передать экземпляр моего класса Vector4 в glVertex3fv, и у меня есть подписка по очевидным причинам. Однако вызовы, которые включают в себя подписку Vector4, становятся неоднозначными для компилятора:
enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);
glTranslatef(v[x], v[y], v[z]);
Вот кандидаты:
candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>
Зачем ему сначала пытаться преобразовать мой Vector4 в GLfloat *, если в Vector4 уже определен оператор индекса? Есть ли простой способ обойти это, который не включает в себя приведение типов? Я просто делаю глупую ошибку? Спасибо за любую помощь заранее.