|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|
Реализация схожих функций без копипаста19.06.2017, 14:05. Показов 2370. Ответов 39
Метки нет (Все метки)
Приветствую.
Задача: имеется несколько схожих функций (одинаковые параметры, код отличается минимально - в одном месте) Функции довольно большие, разбить на части не вариант - циклы и прочее. Как в с++ реализовать это правильно, без стен бойлерплейта? Все что придумал - завернуть в дефайн, но это как-то немножко слишком.
0
|
|
| 19.06.2017, 14:05 | |
|
Ответы с готовыми решениями:
39
Перегрузка функций. Реализация функций
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 15:48 [ТС] | |||
|
Но внушает опасение существование if constexpr - если все так радужно, то зачем вообще оно нужно? То есть понятно что с constexpr лишние ветки даже компилироваться не будут - а без constexpr будут скомпилированы, и (возможно) вырезаны оптимизатором. Если это вся разница - то такой вариант подходит. Добавлено через 39 секунд
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 19.06.2017, 15:59 | |||||||
|
nonenever, возможно пойдет и что-то вроде этого:
Добавлено через 2 минуты
0
|
|||||||
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||||||
| 19.06.2017, 16:00 | ||||||
|
там можно сделать так
0
|
||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 16:04 [ТС] | ||
|
Если будут варианты отличающиеся только вызываемой функцией - так и сделаю. Для варианта где вызова может не быть вовсе - не подходит, там придется лепить шаблоны с ифами, хотя бы без constexpr - если с++17 не получится.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||||
| 19.06.2017, 16:18 | ||||||||
![]() Добавлено через 2 минуты
0
|
||||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 16:36 [ТС] | |||
|
Но (насколько я понял) стек дергает лишний раз, что не хорошо - но хотя бы не бранчит. При прочих равных - минимум бойлерплейта. А количество кода как такового не особенно важно, у меня не тот случай чтобы в L1 не лезло.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 19.06.2017, 16:54 | |||
![]() В боевом коде, да, надо смотреть, но если не злоупотреблять, то тоже все будет хорошо. Ну и, конечно же, проверяй ассемблер, если хочешь знать наверняка. Добавлено через 15 минут Смотри сюда: https://godbolt.org/g/yo18Vi Как видишь, я взял старый компилятор GCC 4.4.7, с опцией оптимизации -O1. Если переписать этот код без всех ухищрений, копи-пастом, то получим абсолютно тоже самое: https://godbolt.org/g/irBrpj Вывод - не надо бояться функций
0
|
|||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 16:57 [ТС] | |||
|
Правда, операторный вариант гораздо страшнее - и это хорошо, люблю такие штуки. Добавлено через 1 минуту Поэтому везде где надо сам ставлю inline.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 19.06.2017, 16:59 | |||
|
Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 17:01 [ТС] | |||
|
size_t - это практически инт, насколько я помню. Добавлено через 31 секунду И пусть никто не уйдет.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 19.06.2017, 17:03 | |
|
0
|
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:05 [ТС] | ||
|
И это хорошо - динамикой пусть в пхп и прочих питонах развлекаются.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 19.06.2017, 17:10 | |||||||
Не скомпилируется это. Если есть подобные случаи и нет доступного constexpr if, то делать придется так, как я выше показывал. Ну или вариации на тему.Добавлено через 4 минуты auto - это вообще не динамика. auto - это этап компиляции. А ошибка там от того, что if требует вычислимости всех веток, а типы в return в этих ветках - разные. Вот компилятор и не может на этапе компиляции определить сигнатуру инстанцированной функции.
0
|
|||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:16 [ТС] | ||
|
Через пару стандартов будет и настоящая, процесс скатывания в пхп необратим.
0
|
||
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 19.06.2017, 17:29 | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 19.06.2017, 17:31 | ||
|
С++ никогда не станет динамически типизированным языком, т.к. это сломает всю его наследственность. Столько усилий сейчас прикладывают в комитете для того, что добавить в язык новые возможности, при этом сохранив совместимость со старым кодом, очень неохотно отказываются от давно неиспользуемых вещей. Это огромная работа по вписыванию новых концепций в старую архитектуру, где нужно и legacy поддержать и not-pay-for-what-you-don't-use обеспечить. И тут бац, такое кардинальное изменение - смена всей парадигмы, которая сделает из С++, по сути, новый язык. Зачем нужно было столько страдать, чтобы разом все сломать? Нет, этого не будет никогда. А если кто-то считает, что будет - он просто вообще, полностью и бесповоротно не понимает С++ и его философию.
0
|
||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||||
| 19.06.2017, 17:38 [ТС] | |||||
|
Насколько я в курсе, другой динамики для компилируемых вообще не бывает. И да, динамика/статика и строгая/нестрогая - это почти ортогональные вещи. Добавлено через 3 минуты
0
|
|||||
| 19.06.2017, 17:42 | |
|
0
|
|
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 19.06.2017, 17:46 | |
|
nonenever, я могу вам только одно сказать - https://habrahabr.ru/post/161205/
0
|
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:55 [ТС] | ||
|
1) Динамики в классическом виде в компилируемых языках не бывает, самое похожее что есть - это авто. 2) Динамика/статика и строгая/нестрогая - ортогональные понятия.
0
|
||
| 19.06.2017, 17:55 | |
|
Реализация функций Реализация функций Влияние копипаста на Seo для тегов сайта Реализация функций в БД магазина Реализация встроенных функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|