Вопрос: является ли оператор преобразования для generi c struct жизнеспособной опцией или просто недостаточно определенным углом? структуры для представления физических типов единиц СИ (с явными операторами для каждого и операторами преобразования между ними). Все работало нормально, пока не появилось новое требование сделать для них обобщенные c 3d-векторы + с операторами преобразования для поддержки читабельного арифметического c синтаксиса ((m)1.3 + (km)0.041
).
Но. CS0556 говорит мне, что "conversion must convert to or from enclosing type"
- это нормально, пока не осознаешь, что это даже невозможно для обобщенных c структур. Потому что хотя преобразования между VECTOR<km>
и VECTOR<T>
могут быть технически законными для определения - в значительной степени бесполезны, если вы не знаете оба типа здесь.
public struct VECTOR<T>
{
public double3 Value;
// I wanted to define all possible conversions this way, but suddenly:
// (CS0556) user-defined conversion must convert to or from enclosing type
public static implicit operator VECTOR<m> ( VECTOR<km> val ) => new VECTOR<m>{ Value = val.Value * 1e+3 };
}
Я знаю, что это может быть преобразовано в классы - все же мне нужно это, чтобы остаться как структура. И преобразование может быть преобразовано в методы - но операторы наиболее математичны и читабельны, и я хочу оставить их. Похоже, тупик. Есть мысли, идеи?