Я пытаюсь создать 2D-векторы, координаты которых являются общими (Vector2Dint, Vector2Dfloat и т. Д.), Чтобы облегчить некоторые математические операции. Я видел, что этот вопрос довольно близок к моему: Can't operator == be applied to generic types in C#?, но мой случай с оператором «*». В принципе мне нужно сделать некоторые математические функции, такие как «крест» или «точкой» для этого вектора, один пример этого:Операторы общих типов
public static T cross<T>(Vec2<T> u, Vec2<T> v)
{
return u.x * v.y - u.y * v.x;
}
Дело в Visual Studio говорит мне один и тот же: «Оператор„*“не может быть применяется к операндам типа «T» и «T» (T - тип координаты). Моя мысль была перегружать «*» оператор внутри класса «vec2», чтобы быть в состоянии умножить эти координаты, имея это:
public static Vec2<T> operator *(T x, T y)
{
return x * y;
}
Но Visual Studio снова говорит мне то же самое. Я уверен, что я не перегружаю операторов правильно, но я не знаю причины. Спасибо за помощь.
EDIT 1: Хорошо, так что мы можем узнать из этого, если вы хотите определить функцию для разных типов (int, float, double и т. Д.) И хотите производительность, лучший способ сделать это - определить функцию для каждого типа, но теперь для меня возникает другая проблема. Если у вас очень длинная функция или несколько длинных функций, ¿это все еще лучший способ?
Вы не знаете, что такое x и y, что заставляет вас думать, что у них есть оператор '*'? – Powerlord
http://stackoverflow.com/a/9486094/3922214 –
Хорошо, T неверно, если вы определили Vec2, тогда ваш оператор будет для двух целых чисел, и вы хотите размножать векторы, а не два целых числа, я прав? –
Gusman