| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > приведение типа указателя на ф-ю |
| Автор: 040375 25.3.2008, 12:01 |
| Раньше я не задумывался над этим вопросом - сейчас стало интересно. Например есть такой код: 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 25.3.2008, 12:47 | ||
пишем:
и компилятор сам скажет что писать [C++ Error] Unit1.cpp(22): E2034 Cannot convert 'void *' to 'void (*)(int)' пишем foo_func b = (void (*)(int)) a; |
| Автор: archimed7592 25.3.2008, 14:11 |
| 040375, точно также, как ты можешь не указывать имена аргументов, ты можешь не указывать и имя результирующего типа(безымянный тип). Т.е. some_func = (int (*)(int))GetProcAddres(...); |
| Автор: GSasha 29.3.2008, 23:59 | ||
Все таки тяжеловато для восприятия В каком порядке эта конструкция разбираеться компилятором? |
| Автор: korian 30.3.2008, 00:17 |
| сравните: (int (*)(int)) int foo(int a); можно сказать foo заменили на (*) и все. |
| Автор: GSasha 30.3.2008, 21:49 |
| Понятно, Тоесть в любом случае тип указателя на функцию получаем таким способом так как имя функции и есть указатель на нее... Правильно korian? Спасибо. |