|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T07.09.2017, 20:58. Показов 4848. Ответов 15
Метки нет (Все метки)
Потихоньку изучаю C#. Тут решил написать обобщенный класс, который тип T представляет из себя любой тип, связанный с числами. Можно ли его как-нибудь до этого ограничить.
Проблема в том, что в моем обобщенном классе есть перегрузка операторов +, - и тд. Соответственно внутри методов перегрузки, мне нужно суммировать, вычитать объекты типа T, что компилятор не дает сделать, так как не знает о T нихрена...ох как же я привык к C++... Как такое реализовывается?
0
|
|
| 07.09.2017, 20:58 | |
|
Ответы с готовыми решениями:
15
Перегрузка операторов +(сложение), -(вычитание), *(умножение) Конфликт двух типов в обобщённом классе |
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
||||||||||||||||
| 07.09.2017, 21:32 | ||||||||||||||||
|
Ограничить получится в лучшем случае интерфейсом
3
|
||||||||||||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||
| 07.09.2017, 21:40 [ТС] | |||
|
jr_,
Грубо говоря, есть класс Matrix<T>, который предоставляет возможность работы с матрицами из линейной алгебры. Мне бы хотелось, чтобы этот класс был обобщенный для таких типов как int, double, float, мнимые числа и тд. И еще, конечно же, хотелось бы перегрузить оператор +(что у меня получилось), и внутри него, по законам линейной алгебры, складывать матрицы. Только вот сложение двух T не получается, так как компилятор не знает о T. Я так понял, такое сделать нереально на C#? И мне придется просто перегрузить оператор + для множество известных типов и все?
0
|
|||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 07.09.2017, 21:44 | |
|
тогда вариант с dynamic будет самым оптимальным
1
|
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 07.09.2017, 21:46 [ТС] | |
|
jr_, я пока до dynamic не дошел еще свое изучение C#. Но уже предполагаю, что этот вариант с dynamic будет долгий...
Ладно, я попробую. Спасибо
0
|
|
|
20 / 20 / 13
Регистрация: 29.08.2017
Сообщений: 89
|
|
| 08.09.2017, 00:52 | |
|
Вот тут есть ещё способ:
Перегрузка операторов в обобщенном классе
1
|
|
|
14299 / 9384 / 1353
Регистрация: 21.01.2016
Сообщений: 35,380
|
||
| 08.09.2017, 07:02 | ||
|
1
|
||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
||||||
| 08.09.2017, 07:49 | ||||||
|
еще прикинул вариант, вспомнив про эту тему Inside CIL (прогни NET ну хоть чуть чуть)
инлайнить IL я не умею, поэтому воспользовался геном. по идее, самый предпочтительный и быстрый вариант.
3
|
||||||
|
14299 / 9384 / 1353
Регистрация: 21.01.2016
Сообщений: 35,380
|
|
| 08.09.2017, 08:05 | |
|
jr_, Хоть так и можно, но по своей сути это - некая разновидность низкоуровнего читерства.
0
|
|
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 08.09.2017, 08:22 | |
|
Usaga, разумеется. врядли найдется такой язык, который бы удовлетворил абсолютно любую потребность. Рано или поздно найдется очень нетривиальная задача. К тому же использование IL еще не такой грязный хак как манипулирование, например, внутренними недокументированными структурами и методами
0
|
|
|
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
|
|||||||||||
| 19.05.2018, 16:19 | |||||||||||
|
jr_, то есть, если я правильно понял, допустим, если мне необходимо сложить два интовых числа по этому алгоритму, то надо добавить
И если я понял правильно, то как тогда сделать другие математические операции - умножение, деление, вычитание
0
|
|||||||||||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 19.05.2018, 16:20 | |
|
Это к какому посту относится ?
0
|
|
|
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
|
||||||
| 19.05.2018, 16:27 | ||||||
|
jr_, к этому.
В теории я ведь правильно понимаю, что умножение, к примеру, делается так:
0
|
||||||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 19.05.2018, 16:32 | |
|
да, так подойдет, при условии что T value определена операция умножения
0
|
|
|
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
|
||||||
| 19.05.2018, 17:08 | ||||||
|
Сделал вот так, может кому пригодится
1
|
||||||
|
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
|
|
| 25.03.2019, 20:55 | |
|
jr_, а не подскажешь как подружить такой метод ещё и с типами с плавающей запятой, а не только с целочисленными типами. А-то при, к примеру, сложении 3х double'в возникает проблема с рефлексией, которую я прям хз как обойти.
0
|
|
| 25.03.2019, 20:55 | |
|
Помогаю со студенческими работами здесь
16
Сложение и вычитание матриц. Перегрузка операторов.
Перегрузка операторов в классе
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|