Большой минус С++
От: maks1180  
Дата: 24.12.21 09:41
Оценка: +1 -1
Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.
Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

1) я пробовал писать всё в h файле (т.е. и тело функций), но тогда возникают проблемы:
1.1 — если класс A использует класс B и класс B использует класс A — что очень часто бывает в больших проектах. Тогда приходится некоторые функции выносить в cpp.
1.2 — проблемы с #define, т.е. если #define определён в cpp после #include, он действует только в одном cpp (обычно один файл cpp = один класс). Если определить #define в h, он будет действовать на все классы которые включены после данного файла.

Может быть данные проблемы уже как-то решены, но я об этом не знаю ?
Если нет, может сделать предкомпилятор, который из одного файла (где объявление и реализация) создаст 2 файла h+cpp, которые будут компилироваться.
===============================================
(реклама, удалена модератором)
Re: Большой минус С++
От: σ  
Дата: 24.12.21 10:02
Оценка:
>Может быть данные проблемы уже как-то решены, но я об этом не знаю ?
Модули?
Re: Большой минус С++
От: Alexander G Украина  
Дата: 24.12.21 10:03
Оценка:
Здравствуйте, maks1180, Вы писали:

M>1.2 — проблемы с #define, т.е. если #define определён в cpp после #include, он действует только в одном cpp (обычно один файл cpp = один класс). Если определить #define в h, он будет действовать на все классы которые включены после данного файла.


#define желательно не использовать лишь в пределах одной единицы трансляции, т.к. это может сломать ODR.
И вообще желательно обойтись другими средствами метапрограммирования. Шаблоны, constexpr функции, if constexpr...
Русский военный корабль идёт ко дну!
Re: Большой минус С++
От: удусекшл  
Дата: 24.12.21 10:21
Оценка: +1
Здравствуйте, maks1180, Вы писали:

M>1) я пробовал писать всё в h файле (т.е. и тело функций), но тогда возникают проблемы:

M>1.1 — если класс A использует класс B и класс B использует класс A — что очень часто бывает в больших проектах. Тогда приходится некоторые функции выносить в cpp.

Включать они друг друга явно не могут, значит, могут использовать по указателю/ссылке. Для этого достаточно сделать forward declaration для одного из этих классов


M>1.2 — проблемы с #define, т.е. если #define определён в cpp после #include, он действует только в одном cpp (обычно один файл cpp = один класс). Если определить #define в h, он будет действовать на все классы которые включены после данного файла.


Нет такой проблемы. Если define объявлен в cpp после инклудов, то это явно какой-то локальный define. Если макрос определён в хидере — то он явно предназначен для использования где угодно. С макросами только одна проблема — у них нет пространств имён. Это решается просто длинным именем с префиксом модуля/библиотеки etc. Макросы же, которые определяют конфигурацию сборки — обычно никто не задаёт в cpp файлах, они передаются компилятору в командной строке. Еще вариант, когда таких макросов много — запихать их в один хидер, и сказать компилятору сделать preinclude данного файла — т.е. включать его перед всем остальным для каждой единицы трансляции


M>Может быть данные проблемы уже как-то решены, но я об этом не знаю ?


Похоже, что не знаешь. Хотя вроде бы давно уже в отрасли, у тебя же какой-то проект с удалённым десктопом или что-то такое, нет?


M>Если нет, может сделать предкомпилятор, который из одного файла (где объявление и реализация) создаст 2 файла h+cpp, которые будут компилироваться.


Можно, но зачем?
Re: Большой минус С++
От: ArtDenis Россия  
Дата: 24.12.21 10:25
Оценка: +9
Здравствуйте, maks1180, Вы писали:

M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.

M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

Какой ты счастливый человек, что это для тебя является основным минусом
Кстати, менять названия функций и перемеренных лучше средствами рефакторинга, а не ручками.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Большой минус С++
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.12.21 11:04
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.

M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

Мелкие функции имеет смысл писать в заголовках для инлайнинга, а для больших дублирование объявлений не даёт заметную проблему.

M>1) я пробовал писать всё в h файле (т.е. и тело функций), но тогда возникают проблемы:

M>1.1 — если класс A использует класс B и класс B использует класс A — что очень часто бывает в больших проектах. Тогда приходится некоторые функции выносить в cpp.

Ещё можно сделать абстрактный класс с нужными функциями в роли интерфейса.

M>1.2 — проблемы с #define, т.е. если #define определён в cpp после #include, он действует только в одном cpp (обычно один файл cpp = один класс). Если определить #define в h, он будет действовать на все классы которые включены после данного файла.


Если это не что-то радикальное вроде макры RB_PROTOTYPE, то const/constexpr выгоднее тем, что имеет пространство имён.
Если радикальное, ему можно дать имя с длинным префиксом и затем #undef в конце заголовочника.

M>Может быть данные проблемы уже как-то решены, но я об этом не знаю ?


А это проблемы? Ну я понимаю, что половина использующих C++ реально пишет на "C с классами", но это как-то не очень тематично...
The God is real, unless declared integer.
Re: Большой минус С++
От: kov_serg Россия  
Дата: 24.12.21 11:15
Оценка: +2
Здравствуйте, maks1180, Вы писали:

M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.

Вы счастливый человек.

M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

Как же мучаются писатели составляя оглавление и предметные указатели.
Re: Большой минус С++
От: Maniacal Россия  
Дата: 24.12.21 11:21
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.

M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

Современные IDE умеют одним кликом мышки заводить новые классы, добавлять новые функции и члены класса сразу и в хедерах и в исходниках. Так же переименовывать сразу во всех исходниках (у них это в разделе "Рефакторинг" в выпадающем меню)
Re: Большой минус С++
От: _NN_ www.nemerleweb.com
Дата: 24.12.21 11:23
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.

M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

В смысле писать ?
Сегодня любые IDE это делают за вас.
Пишете один раз в заголовке и в один щелчок появляется заготовка в cpp файле.
Также если нужно изменить прототип, меняем один раз, а IDE уже сама поменяет везде, где надо.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Большой минус С++
От: sergii.p  
Дата: 24.12.21 11:46
Оценка: +3
Здравствуйте, kov_serg, Вы писали:

_>Как же мучаются писатели составляя оглавление и предметные указатели.


так в системах вёрстки здорового человека (latex например) оглавление и предметные указатели формируются автоматически.
Re[3]: Большой минус С++
От: kov_serg Россия  
Дата: 24.12.21 11:47
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>так в системах вёрстки здорового человека (latex например) оглавление и предметные указатели формируются автоматически.

Ага после нескольких проходов
Re[2]: Большой минус С++
От: maks1180  
Дата: 24.12.21 17:47
Оценка: +1
M>Современные IDE умеют одним кликом мышки заводить новые классы, добавлять новые функции и члены класса сразу и в хедерах и в исходниках. Так же переименовывать сразу во всех исходниках (у них это в разделе "Рефакторинг" в выпадающем меню)

Это да:
1) часто на сервере нужно править исходники. Там только текстовый терминал.
2) современные IDE, часто имеет проблемы если использовать макросы или шаблоны.
3) Я привык клавитатурой работать быстро, а тут нужно мышкой править через IDE — это дольше и неудобнее.
4) И намного удобнее когда 1 файл = 1 класс.
===============================================
(реклама, удалена модератором)
Отредактировано 24.12.2021 17:49 maks1180 . Предыдущая версия .
Re: Большой минус C#
От: Mystic Artifact  
Дата: 24.12.21 18:15
Оценка: +7
Здравствуйте, maks1180, Вы писали:

Для меня основной минус C# от которого хотелось бы избавиться — это чудовищная организация кода.
Открываешь файл — там класс на 1K+ строчек, и понять, что вообще там за методы или свойства есть — никакого способа нет, кроме как исследовать код через IDE (при чём во всех это сделано через неудобно).

В общем, минус .h файлов — он же и его плюс. Если .h файлы хорошо оформлены — то с таким кодом, очень приятно работать.
Re[3]: Большой минус С++
От: _NN_ www.nemerleweb.com
Дата: 24.12.21 18:41
Оценка:
Здравствуйте, maks1180, Вы писали:

M>>Современные IDE умеют одним кликом мышки заводить новые классы, добавлять новые функции и члены класса сразу и в хедерах и в исходниках. Так же переименовывать сразу во всех исходниках (у них это в разделе "Рефакторинг" в выпадающем меню)


M>Это да:

M>1) часто на сервере нужно править исходники. Там только текстовый терминал.
Берём VSCode поверх SSH.
Или VIM/NeoVIM с плагинами.

M>2) современные IDE, часто имеет проблемы если использовать макросы или шаблоны.

M>3) Я привык клавитатурой работать быстро, а тут нужно мышкой править через IDE — это дольше и неудобнее.
Все IDE умеют горячие клавиши и работу с клавиатурой.
К тому же везде ещё есть и режим VIM если очень нужно.

M>4) И намного удобнее когда 1 файл = 1 класс.

Ну это вам язык менять надо. C/C++ так не работают.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Большой минус С++
От: reversecode google
Дата: 24.12.21 18:52
Оценка:
M>>4) И намного удобнее когда 1 файл = 1 класс.
_NN>Ну это вам язык менять надо. C/C++ так не работают.

только тем кто не освоил модули из С++20
Re[5]: Большой минус С++
От: _NN_ www.nemerleweb.com
Дата: 24.12.21 18:57
Оценка: +3
Здравствуйте, reversecode, Вы писали:


M>>>4) И намного удобнее когда 1 файл = 1 класс.

_NN>>Ну это вам язык менять надо. C/C++ так не работают.

R>только тем кто не освоил модули из С++20


Расскажите в каком компиляторе они работают без проблем ?
https://en.cppreference.com/w/cpp/compiler_support/20
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Большой минус С++
От: reversecode google
Дата: 24.12.21 19:12
Оценка: -1
плохому танцору....
Re: Большой минус С++
От: LaptevVV Россия  
Дата: 24.12.21 19:19
Оценка:
M>Для меня основной минус с++ от которого хотелось бы избавиться — это дублирование кода.
M>Приходиться одно и тоже писать (название функций) в h и в cpp файлах. И менять тоже нужно в двух местах.

Я с этим столкнулся еще в 1992 году...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Большой минус C#
От: sergii.p  
Дата: 24.12.21 19:57
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

MA>Открываешь файл — там класс на 1K+ строчек, и понять, что вообще там за методы или свойства есть — никакого способа нет, кроме как исследовать код через IDE (при чём во всех это сделано через неудобно).


в студии Ctrl M + O Collapse To Definitions. Получаем просто h файл.
Re[7]: Большой минус С++
От: _NN_ www.nemerleweb.com
Дата: 24.12.21 20:07
Оценка:
Здравствуйте, reversecode, Вы писали:

R>плохому танцору....


Я так понимаю это лишь бы сказать.

Вы лично с модулями работаете или работали ?
Вот попробуйте и покажите нам как хорошо компиляторы их поддерживают.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.