|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|
Реализация схожих функций без копипаста19.06.2017, 14:05. Показов 2034. Ответов 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
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 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
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||||
| 19.06.2017, 16:18 | ||||||||
![]() Добавлено через 2 минуты
0
|
||||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 16:36 [ТС] | |||
|
Но (насколько я понял) стек дергает лишний раз, что не хорошо - но хотя бы не бранчит. При прочих равных - минимум бойлерплейта. А количество кода как такового не особенно важно, у меня не тот случай чтобы в L1 не лезло.
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 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
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 19.06.2017, 16:59 | |||
|
Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 17:01 [ТС] | |||
|
size_t - это практически инт, насколько я помню. Добавлено через 31 секунду И пусть никто не уйдет.
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.06.2017, 17:03 | |
|
0
|
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:05 [ТС] | ||
|
И это хорошо - динамикой пусть в пхп и прочих питонах развлекаются.
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 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
|
||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 19.06.2017, 17:29 | |
|
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 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
|
|
|
Форумчанин
8216 / 5047 / 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 | |
|
Помогаю со студенческими работами здесь
40
Реализация функций Реализация функций Влияние копипаста на Seo для тегов сайта Реализация функций в БД магазина Реализация встроенных функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|