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 уже определен оператор индекса? Есть ли простой способ обойти это, который не включает в себя приведение типов? Я просто делаю глупую ошибку? Спасибо за любую помощь заранее.

Ответы на вопрос(0)

Ваш ответ на вопрос