![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Robix |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Здравстуйте, есть такой код
Order.h ... typedef void __stdcall ORDER_CALLBACK( PORDERHDR porder, int extra_data ); typedef ORDER_CALLBACK *PORDER_CALLBACK; ... Order.cpp ... #include "Order.h" ... ORDER_CALLBACK orderCallback; ... Можете объяснить, что означает typedef void __stdcall ORDER_CALLBACK( PORDERHDR porder, int extra_data ); Что в данном случае есть ORDER_CALLBACK ? И далее в Order.cpp ORDER_CALLBACK orderCallback; orderCallback это будет функция или что-то еще? Как это понимать? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
функция. такой typedef дает возможность сделать краткую декларацию, например
|
|||
|
||||
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Есть такой тип в Си - указатель на функцию. Чаще всего его используют, чтобы передать в какую-то чужую функцию свою функцию, которую чужая будет вызывать (т.н. callback'и). Например, некая сетевая библиотека умеет передавать и принимать по сети данные, но что при получении данных с ними делать она не знает, и, поэтому, она требует, чтобы тот, кто ею пользуется, указал свою функцию, которую сетевая библиотека будет вызывать при приёме данных.
Как видишь, определение переменной onDataReceived и сигнатура функции setCallBackOnDataReceived довольно громоздкие, и при изменении количества или типов параметров в callback'е придётся менять в нескольких местах. Чтобы этого избежать мы можем ввести typedef для типа "указатель на функцию, принимающую void * и int и возвращающую void". На Си это будет выглядеть так:
и код в примере выше будет выглядеть почище:
Теперь при изменении параметров callback'а нужно будет только поправить определение типа onDataReceived_t и, собственно, вызов самого callback'а. Добавлено через 6 минут и 40 секунд ORDER_CALLBACK - это тип, в экземпляре которого может храниться указатель на функцию, принимающую два параметра, ничего возвращающую и имеющую тип вызова __stdcall. orderCallback - это экземпляр типа ORDER_CALLBACK. Пока он не проинициализирован каким-то указателем на функцию, использовать его нельзя (так же, как и с обычными указателями). -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
замечаете разницу?
так что неверно потому что
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |