Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> приведение типа указателя на ф-ю, приведение типа указателя на ф-ю 
:(
    Опции темы
040375
Дата 25.3.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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???
PM MAIL   Вверх
korian
Дата 25.3.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



пишем:
Код

void foo(int a);
typedef void (*foo_func)(int);

void *a = foo;
foo_func b = a;

и компилятор сам скажет что писать  smile 
[C++ Error] Unit1.cpp(22): E2034 Cannot convert 'void *' to 'void (*)(int)'
пишем
foo_func b = (void (*)(int)) a;

PM   Вверх
archimed7592
Дата 25.3.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 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
PM Jabber   Вверх
GSasha
Дата 29.3.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата

 Т.е. some_func = (int (*)(int))GetProcAddres(...);

Все таки тяжеловато для восприятия smile 
В каком порядке эта конструкция разбираеться компилятором?
PM MAIL ICQ   Вверх
korian
Дата 30.3.2008, 00:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



сравните:
(int (*)(int))
int foo(int a);
можно сказать foo заменили на (*) и все.

PM   Вверх
GSasha
Дата 30.3.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Понятно, Тоесть в любом случае тип указателя на функцию получаем таким способом так как имя функции и есть указатель на нее... Правильно korian?
Спасибо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.