|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
||||||
перегрузка функций10.07.2009, 14:05. Показов 3696. Ответов 17
Метки нет (Все метки)
При использовании шаблонов <T> компилятор ругается на несоответствие типов - T он воспринимает как object. Заранее спасибо
0
|
||||||
| 10.07.2009, 14:05 | |
|
Ответы с готовыми решениями:
17
Создать массив n функций и вывести полную информацию о значении данных функций в точке х |
|
0 / 0 / 0
Регистрация: 13.07.2009
Сообщений: 4
|
||||||
| 13.07.2009, 15:48 | ||||||
|
возможно так-по крайней мере кода меньше....
0
|
||||||
|
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
|
|
| 13.07.2009, 16:54 | |
|
private void A<T>(T arg) where T : struct
{ //реализация 1 }
0
|
|
|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
||||||
| 13.07.2009, 19:22 [ТС] | ||||||
|
спасибо, конечно за ответы, но:
1) fromrus, если я использую В в цикле, то у меня проверка на тип аргумента выполныется два раза за итерацию, а это мне совсем ненадо. 2) exe-dealer, я писал, что компилятор такое не хавает. Метод А требует конкретный тип аргумента int или double, а дженерики он рассматривает как object независимо от ограничений, и хочет привести его к int или double, и не может! Вот мой вариант, но мне он ненравится:
Добавлено через 12 минут 27 секунд exe-dealer, это если у вас в посте опечатка и вы имели ввиду таки В, а не А. Если же Вы имели ввиду именно то, что написали , то замечу, что А для разных аргументов имеет абсолютно разные реализации, шаблоны там не помогут. Посему в листинге я написал "//реализация 1" и "//реализация 2"
0
|
||||||
|
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
|
||||||
| 13.07.2009, 19:44 | ||||||
|
не совсем понял в начале. Я подумал что с шаблонами проблема.
может вот так пойдет
0
|
||||||
|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
|
| 13.07.2009, 21:15 [ТС] | |
|
вот так и плодятся незримые баги
![]() у меня абсолютно различные реализации А для int и double, хоть они и возвращают один тип, но результат-то разный! Ты же предлогаеш отказаться от целочисленной реализации А Пример реальной задачи с такой ситуацией - когда надо что-то посчитать с абсолютным (int) и относительным (double) порогами. Тип возвращаемого аргумента один, а реализации абсолютно разные. З.Ы. все еще актуально
0
|
|
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
|
| 13.07.2009, 21:22 | |
|
exe-dealer, при таком подходе A(int arg) так никогда и не вызовется
.fromrus, а зачем было функцию A сводить в одну с параметром obj, если в функции B в зависимости от типа входного параметра делать приведение к конкретному типу ? В любом случае, по постановке задачи, реализация функций A(int arg) и A(double arg) отличается и по-этому общую функцию А получить не выйдет. 9h05t, несколько замечаний. Второй твой вариант позволяет написать реализацию функции В один раз, но он, ИМХО, ничем не лучше варианта fromrus, если тебя в нем не устраивала скорость. Дело в том, что вызов каждой функции связан с накладными расходами (выкладывание параметров на стек, переход по новому адресу, снятие параметров со стека, возврат), а у тебя по сравнению с предложением fromrus добавилось 2 лишних вызова функций: 1) из С вызов B(crutch), 2) из В вызов функции-делегата и только потом идет вызов целевой функции А. Тем более, что какая-то проверка у тебя в функции С остается. Проверка типа параметра и последующее его приведение решение не совсем элегантное, но в плане скорости не должно особо пугать, особенно когда после этого начинаешь придумывать что-то вообще страшное .Но у меня возник вопрос, а что это за методы А такие, что у них разная реализация в зависимости от типа параметра? Можешь подробнее рассказать о том, что ты пытаешься реализовать? Может получится найти решение не там, где ты ожидаешь .
0
|
|
|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
|
| 14.07.2009, 02:32 [ТС] | |
|
max_cn, C - это уже способ применения В, так что проверка приосходит только один раз и дополнительный вызов функции - тоже.
Я писал что этот вариант мне ненравится - и именно из-за лишнего вызова функции. Хотелось бы еще знать что выдаст на выходе оптимизатор кода C#. А насчет конкретики - например мне надо сделать выборку одних и тех же данных из одной и той-же таблицы, но по разным критериям. Целочисленный критерий (порог) - значит выборка идет по количеству встречаемостей в таблице, с плавающей точкой - значит по весу элемента. А - метод в провайдере базы В - метод в класе-надстройке над провайдером С - метод пользователя класом
0
|
|
|
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
|
|
| 14.07.2009, 02:55 | |
|
А если использовать второй параметр в методе A? Например булева переменная, если истина, тогда как порог, если ложь - значит по весу.
0
|
|
|
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
|
|
| 14.07.2009, 03:27 | |
|
тогда не булеву, а enum чтоб читабельность лучше была.
0
|
|
|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
|
| 14.07.2009, 10:15 [ТС] | |
|
Green, в А выборка из базы, обработка выборки, сама по себе немаленькая, а если еще слепить два метода в 1, то будет вообще венегрет
![]() вобщем это уже флейм пошел. Как я понял, приемлемого стандартного решения наподобии сишных шаблонов (что есть очень неприятно и странно) в шарпе нет и надо перекраивать задачу. Если я (надеюсь) неправ, то, пожалуста, пишите
0
|
|
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
|||||||||||
| 14.07.2009, 12:14 | |||||||||||
|
9h05t, мне как то не довелось разбираться с С++ шаблонами, только слышал, что они немного мощнее generic классов C#, за счет поддержки некоторых возможностей для метапрограммирования (создание программ, создающих более сложные программы).
Нужно просто понимать, что такое generic классы C# - это классы, которые имеют ЕДИНУЮ реализацию для некоторого набора типа данных. Так что по определению твоя задача через этот механизм не решается. Зато он прекрасно подходит для создания стандартизированных контейнеров различных классов. Уж если тебе не нравится проверять параметр в единой функции В, ИМХО, лучше написать так:
Какие-то промежуточные значения, получаемые в f1(), можешь сохранить в полях класса. Но, снова же ИМХО, куда проще написать так, как уже предлагалось (с маленьким уточнением):
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 13.07.2009
Сообщений: 4
|
|
| 14.07.2009, 12:54 | |
|
тут уж стока всего прообсуждалось,что наверное времени на выбор написания потратиось больше чем на само написание)))))если прога написана-то в виде рефакторизации дозволено,если нет-то производительней(по времени и силам) выбирать любой из предложенных вариантов)))имхО...
0
|
|
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
||||||
| 14.07.2009, 13:16 | ||||||
|
Для автора все, что отличается от:
Но так как такая запись не поддерживается компилятором (а было бы и не плохо, если бы поддерживалась ), то остается выбрать только менее извращенный вариант.9h05t, я все никак не пойму природу твоих предубеждений перед if в функции В. Промерь при помощи Stopwatch скорость различных реализаций и убедись, что ничего страшного там нету .
0
|
||||||
|
4 / 4 / 0
Регистрация: 07.05.2009
Сообщений: 29
|
|
| 14.07.2009, 13:25 [ТС] | |
|
Да я понимаю, что это наименее затратный вариант, но как-то это неправильно... вроде шаблоны есть, только какие-то они ограниченые из-за строгой типизации. Вобщем сделал на if ...
0
|
|
|
|
|
| 14.07.2009, 13:41 | |
|
Проблема шаблонов не в том, что они ограничены в типизации, а в том, что их можно применять только к целиковой конструкции (классу или функции), но к отдельным методам класса нельзя
0
|
|
| 14.07.2009, 13:41 | |
|
Помогаю со студенческими работами здесь
18
Перегрузка функций с sql запросами Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов Перегрузка функций, шаблоны функций Функция определения объемов: шара по его радиусу Перегрузка функций. Реализация функций Перегрузка функций с++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|