Информация об изменениях

Сообщение Re: Большой минус С++ от 28.12.2021 8:34

Изменено 28.12.2021 8:55 AlexGin

Re: Большой минус С++
Здравствуйте, maks1180, Вы писали:

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

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

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

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

В таких случаях я применяю "интерфейс" (для C++ это абстрактный базовый класс):
https://stackoverflow.com/questions/9756893/how-to-implement-interfaces-in-c
Тогда класс A будет использовать InterfaceB (базовый класс для B) вместо непосредственно класса B.

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


Зачем использовать макрос #define, если давно уже есть constexpr:
https://rules.sonarsource.com/cpp/RSPEC-5028
https://devblogs.microsoft.com/cppblog/convert-macros-to-constexpr
https://stackoverflow.com/questions/42388077/constexpr-vs-macros

Для более сложных случаев, вместо макроопределения для функций/типов — применяю ключевое слово using (как алиас для пользовательских типов данных):
https://en.cppreference.com/w/cpp/language/type_alias

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


Это не проблемы.
Что же касается названия и аргументов функций, то лббая IDE решает данные вопросы.
Re: Большой минус С++
Здравствуйте, maks1180, Вы писали:

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

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

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

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

В таких случаях я применяю "интерфейс" (для C++ это абстрактный базовый класс):
https://stackoverflow.com/questions/9756893/how-to-implement-interfaces-in-c
Тогда класс A будет использовать InterfaceB (базовый класс для B) вместо непосредственно класса B.

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


Зачем использовать макрос #define, если давно уже есть constexpr:
https://rules.sonarsource.com/cpp/RSPEC-5028
https://devblogs.microsoft.com/cppblog/convert-macros-to-constexpr
https://stackoverflow.com/questions/42388077/constexpr-vs-macros

Для более сложных случаев, вместо макроопределения для функций/типов — применяю ключевое слово using (как задание алиаса для пользовательских типов данных):
https://en.cppreference.com/w/cpp/language/type_alias

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


Это не проблемы.
Что же касается названия и аргументов функций, то лббая IDE решает данные вопросы.