![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
040375 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 6.4.2006 Репутация: нет Всего: 2 |
Раньше я не задумывался над этим вопросом - сейчас стало интересно. Например есть такой код:
int (*type_some_func)(int); type_some_func some_func; ..... // Для более практичного примера возмём API вендовс - хотя сути вопроса это не касается HANDLE h_dll=LoadLibrary("some_dll.dll"); ...... // теперь получим какой либо адрес ф-ии с помощью GetProcAddress; some_func=(type_some_func)GetProcAddress(h_dll, "some_func"); Подскажите, если можно приведите пример, как проделать тоже, что в вышеприведённом коде, не пользуясь объявлением псевдонима типа с помощью typedef, т.е. к примеру some_func=(int (*())); // компилятором здесь конечно же будет сгенерирована ошибка Как привести - чтобы не выдавалось ошибки компилятором и не пользуясь typedef??? |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
пишем:
и компилятор сам скажет что писать ![]() [C++ Error] Unit1.cpp(22): E2034 Cannot convert 'void *' to 'void (*)(int)' пишем foo_func b = (void (*)(int)) a; |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
040375, точно также, как ты можешь не указывать имена аргументов, ты можешь не указывать и имя результирующего типа(безымянный тип). Т.е. some_func = (int (*)(int))GetProcAddres(...);
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Все таки тяжеловато для восприятия ![]() В каком порядке эта конструкция разбираеться компилятором? |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
сравните:
(int (*)(int)) int foo(int a); можно сказать foo заменили на (*) и все. |
|||
|
||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Понятно, Тоесть в любом случае тип указателя на функцию получаем таким способом так как имя функции и есть указатель на нее... Правильно korian?
Спасибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |