Как перегрузить операторы +, -, *, /, / = и т. Д. Для SSE-типа __m128 с помощью Apple GCC 4.2.1? - PullRequest
2 голосов
/ 18 апреля 2011

Я портирую игру на OS X , которая использует перегрузку операторов для типа __m128 , например:

__forceinline __m128 operator - ( __m128 a, __m128 b )
{
    return _mm_sub_ps ( a, b );
}

__forceinline __m128 operator * ( __m128 a, __m128 b )
{
    return _mm_mul_ps ( a, b );
}

И Apple GCC v4.2.1 выдает мне следующие ошибки:

ошибка: 'float vector оператор- (float vector , float vector ) 'должен иметь аргумент класса или перечислимого типа

ошибка: 'float vector оператор * (float vector , float vector ) 'должен иметь аргумент класса или перечислимого типа

Я нашел ссылку , описывающую этот тип ошибок как ошибку GCC , которая была решена в v4.0 ...

А теперь я полностью потерян ... Пожалуйста, помогите мне разобраться с этой проблемой ...

1 Ответ

1 голос
/ 21 апреля 2012

Я использую g ++ 4.6.1 и обнаружил одно и то же сообщение об ошибке в аналогичной ситуации, это происходит, когда оба аргумента являются встроенными типами:

Оператор алгоритма + (const char * a, double b);оператор algo + (double a, const char * b);

Я понимаю, что было бы сложно переопределить + (int, int), потому что компилятор полагается на то, что он выполняет вычисления, так как вычисления происходят во время компиляции, а нево время выполнения, поэтому предоставляемый вами код недоступен во время компиляции, а позже во время выполнения данные уже рассчитаны.

Жаль, что мы не можем этого сделать, это должно быть разрешено для встроенных типов при условии, что типы былиотличается (это мой случай), и для этого случая у компилятора нет ответа по умолчанию.

для случая + (int, int), я думаю, что это никогда не будет разрешено из-за вышеизложенного.если только компиляторы не принимают какие-то параметры, чтобы оставить эти вычисления во время выполнения (и я еще не проверял такие параметры).Я думаю, что подобное происходит с поплавками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...