60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
|
||||||
1 | ||||||
Перегрузка операторов в обобщенном классе17.02.2017, 17:54. Показов 3360. Ответов 11
Метки нет Все метки)
(
Всем привет.
Вопрос такой: "Можно ли в обобщённом классе как-нибудь перегрузить операторы *, -, +"? У меня сейчас выдаёт ошибку: "Оператор * невозможно использовать с операндами типа "Т" "Т".
0
|
|
17.02.2017, 17:54 | |
Ответы с готовыми решениями:
11
Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T Перегрузка операторов в классе треугольник. Ошибка "бинарный оператор принимает два параметра"
|
3477 / 2482 / 1172
Регистрация: 14.08.2016
Сообщений: 8,180
|
|
17.02.2017, 18:02 | 2 |
afaik, низя
1
|
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
|
|
17.02.2017, 18:06 | 3 |
тут решать либо unsafeом (указатели) либо рефлексия
1
|
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
|
|
17.02.2017, 18:11 [ТС] | 4 |
iDReeM, я подумал о рефлексии сразу, как только увидел эту ошибку. В сторону unsafe даже не смотрел.
0
|
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
|
|
17.02.2017, 18:30 | 5 |
ограничения, ограничения...
нужно заставить поверить компилятор, что T принимает только "типы значений", с которыми можно проводить операции подобного рода. Проще всего - поставив ограничение на ссылочные типы. Добавлено через 5 минут а нет, не помогло. дело в классе.
0
|
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
|
|
17.02.2017, 18:40 [ТС] | 6 |
iDReeM, я пробовал ставить ограничение на ссылочный тип. Не работает. Тем более, я должен ещё иметь возможность использовать класс с базовыми типами данных.
0
|
Администратор
![]() |
|
17.02.2017, 19:45 | 7 |
![]() Решение
Соловьёв_Егор, в библиотеке MiscUtil Джона Скита есть класс Operator как раз для такого случая.
4
|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
|
25.09.2019, 18:46 | 8 |
Я скачал, там просто статический класс, как именного его можно использовать для решения проблемы? или где взять примеры решения?
0
|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
|
25.09.2019, 18:50 | 9 |
Или, например, мне нужно в классе комплексных чисел вставить функцию sin, которая будет выражаться через Math.Sin. Как убедить компилятор, что у Math.Sin найдется перегрузка, принимающая тип T?
0
|
Администратор
![]() |
||||||
25.09.2019, 19:00 | 10 | |||||
Дмитрий Паскаль, по моему все ясно из сигнатуры обобщенных методов. Передаем два операнда - получаем результат.
Написать обобщенный метод Sin по аналогии с обобщенными реализациями арифметических операций библиотеке MiscUitl.
1
|
10 / 7 / 3
Регистрация: 25.02.2018
Сообщений: 86
|
|
25.09.2019, 19:01 | 11 |
это ясно, но
1) если мне надо использовать тип T в методах других классов, ожидающих числа? 2) как постоянно обращение к Operator будет влиять на производительность?
0
|
Администратор
![]() |
|
25.09.2019, 19:19 | 12 |
Надо значит используй.
Плохо скажется. Чудес увы не бывает. Если есть возможность то лучше отказаться от использования обобщений в данном случае.
0
|
25.09.2019, 19:19 | |
Помогаю со студенческими работами здесь
12
Перегрузка операторов
Перегрузка операторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |