Законен ли оператор преобразования для структуры generi c? - PullRequest
0 голосов
/ 29 апреля 2020

Вопрос: является ли оператор преобразования для 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 };
}

Я знаю, что это может быть преобразовано в классы - все же мне нужно это, чтобы остаться как структура. И преобразование может быть преобразовано в методы - но операторы наиболее математичны и читабельны, и я хочу оставить их. Похоже, тупик. Есть мысли, идеи?

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