none
Ограничение параметров типа RRS feed

  • Вопрос

  • Имеется класс:

    class TMemory<TYPE> where TYPE: ...
    {
        public TYPE mem;
    
        public Add(TYPE b)
        {
            a.mem += b;
        }
    }
    Ругается на то, что невозможно сложить объекты типа TYPE (оно и понятно)

    Как ограничить виды типа так, что бы TYPE обязательно был с перегруженным оператором сложения?


    3 октября 2015 г. 17:41

Ответы

  • Увы, никак.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа YatajgaEditor 3 октября 2015 г. 19:52
    • Помечено в качестве ответа kvart714 3 октября 2015 г. 20:06
    3 октября 2015 г. 17:58
    Модератор
  • Все таки получилось сложить два универсальных типа! :)

    class TMemory<TYPE> where TYPE: ... { public TYPE mem; public Add(TYPE b) { MethodInfo m = typeof(TYPE).GetMethod("op_Addition"); mem = m.Invoke(null, new object[] { mem , b }); } }


    • Помечено в качестве ответа kvart714 3 октября 2015 г. 21:10
    3 октября 2015 г. 21:03

Все ответы

  • Увы, никак.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа YatajgaEditor 3 октября 2015 г. 19:52
    • Помечено в качестве ответа kvart714 3 октября 2015 г. 20:06
    3 октября 2015 г. 17:58
    Модератор
  • Все таки получилось сложить два универсальных типа! :)

    class TMemory<TYPE> where TYPE: ... { public TYPE mem; public Add(TYPE b) { MethodInfo m = typeof(TYPE).GetMethod("op_Addition"); mem = m.Invoke(null, new object[] { mem , b }); } }


    • Помечено в качестве ответа kvart714 3 октября 2015 г. 21:10
    3 октября 2015 г. 21:03
  • Если вас не смущает использование отражений которое приведет к некоторому замедлению данной операции (где нибудь во много десятков тысяч - миллион раз) то конечно...

    Так же же неплохо наверное добавить обработку ошибок так как тип может быть любым, в том числе и без данного оператора. Тогда конечно код упдает с NRE.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    3 октября 2015 г. 21:30
    Модератор