реклама на сайте
подробности

 
 
> Указатели на функции С++, Корректность применения
nice_vladi
сообщение Nov 11 2017, 10:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239



Всем привет.

Начал осваивать С++ и в один прекрасный момент подумал, что было бы не плохо вызывать функции по указателям на них.

Никаких ивентов и тому подобных вещей. При инициализации передал указатель на функцию создаваемому классу - и пожалуйста, он ею щелкает, когда душе угодно. Допустим, что-то на GUI обновляет.

НО! В какой-то момент я задумался о целесообразности применения, да и вообще корректности использования. Приведу пример: есть такая вещь, как goto: Но ее применять не рекомендуется,
потому-что - потому-что.

Есть ли какие-то подобные рекомендации по применению указателей на функции? Ну и вообще, подводные камни, так называемые.

Visual Studio 2013

Спасибо! biggrin.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Nov 11 2017, 17:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



https://pro-prof.com/forums/forum/programmi...cplusplus_notes
Чрезвычайно полезный блог. 98 % программеров на Срр толком и не знают, что они делают. О goto
Цитата
Оператор goto это гораздо более порядочный инструмент чем, например, C-style cast, или «сишная» функция exit.

Некоторые авторы все вселенские беды приписывают этому оператору. Они готовы сжечь его на костре как ведьму, если бы это было возможно.

«Ругание» goto — совершенно бессмысленная трата времени и чернил

https://pro-prof.com/forums/topic/6-cplusplus-goto

https://pro-prof.com/forums/topic/7-cplusplus_inheritance
А тут хорошее размышление о наследовании, оное при знакомстве с языком пихают где ни попадя (я в книге прочел) и имеют много проблем. Вообше С++ язык, к которому надо прийти самому, когда надоест ловить глюки на (c-ctyle) cast и подобной хрени.

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

Вообще имхо 99% учебников программирования бесполезны. Учить надо проектированию в первую очередь, а какой язык - не так важно
. На ассемблере можно писать прекрасный код, хоть с динамическим полиморфизмом и кучей умных слов, оные есть в каждой книжке, но даются как обезьянам очки

А первый 30 страниц любого "для чайников" стоит начать с UML

И многое сейчас выглядит иначе, чем 10 лет над. Например венегрская нотация - вредная вещь, а количество комментариев к коду - должно стремиться к нулю
Go to the top of the page
 
+Quote Post
_pv
сообщение Nov 11 2017, 17:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(DASM @ Nov 11 2017, 23:16) *
"из набора, скажем, 100 функций." явно ошибка проектирования, так не бывает.

ну вот есть какое-нибудь устройство с кучей регистров.
при получении пакета с чтением/записью регистра вместо большого switch имхо проще руками сделать массив функций из которого нужная позовётся по адресу регистра.
пусть этот массив и будет забит в основном стандартной заглушкой, если там хотя бы десяток другой различных функций наберётся уже красивее выглядеть будет.
Go to the top of the page
 
+Quote Post
DASM
сообщение Nov 11 2017, 18:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(_pv @ Nov 11 2017, 20:37) *
ну вот есть какое-нибудь устройство с кучей регистров.
при получении пакета с чтением/записью регистра вместо большого switch имхо проще руками сделать массив функций из которого нужная позовётся по адресу регистра.
пусть этот массив и будет забит в основном стандартной заглушкой, если там хотя бы десяток другой различных функций наберётся уже красивее выглядеть будет.

А свитч то зачем? Регистры все разных типов, что их надо устанавливать совершенно разным кодом?
Go to the top of the page
 
+Quote Post
_pv
сообщение Nov 11 2017, 18:46
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(DASM @ Nov 12 2017, 00:04) *
А свитч то зачем? Регистры все разных типов, что их надо устанавливать совершенно разным кодом?

ну пусть это будут регистры которые отвечают за всякую разную периферию, соответственно при записи определённых регистров надо делать определённые действия, а не просто записать значение в память.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 04:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01667 секунд с 7
ELECTRONIX ©2004-2016