|
Тема
|
каст на указател към функция, без typedef?
|
|
Автор |
zaphod (void *lpNothing) |
Публикувано | 28.04.07 11:08 |
|
С/С++ са бездънна яма. убеден съм че до края на живота ми ще има тъмни кьошета които ще умра без да съм видял.
тия дни се натъкнах на едно такова - усетих че не мога да накарам компилатора да ми кастне някакъв воид указател към конкретен тип функция. по принцип, указателите към функция имат малко странния синтаксис "връщан тип (* етикет)(типове на аргументи)"
това нещо обаче не виждам как може да се накара да каства, понеже етикета е по средата на декларацията, а не вдясно от нея, както е при нормалните декларации. пробвах да натъпча на мястото на етикета указателя със параметрите, т.е. нещо от рода на: инт (* указател(1,2,3))(инт,инт,инт), ама не щя. пробвах и разни други идеи, ама и те не щяха. възможно ли е въобще, мадафака?
NE SUTOR ULTRA CREPIDAM
| |
Тема
|
Re: каст на указател към функция, без typedef?
[re: zaphod]
|
|
Автор |
Colombino (работен) |
Публикувано | 28.04.07 12:19 |
|
Бе то че може - може. И е едно от нещата дето по-добре да не се прави въпреки че може. Става за тъп въпрос за интервю от тези дето нищо полезно не научаваш като ги зададеш. И аз го бех забравил синтаксиса и ми отне поне 5 мин. с компилатор и Google да го нацеля:
int f(int a, int b)
{
std::cout << a << b << std::endl;
return a + b;
}
int main(void)
{
void *pF = f;
int c = (*reinterpret_cast< int(*)(int, int)>(pF))(2, 3);
std::cout << c << std::endl;
return 0;
}
Клубовете малко се понаебаха и не можах да постна.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
Re: каст на указател към функция, без typedef?
[re: zaphod]
|
|
Автор |
lxeos (непознат
) |
Публикувано | 28.04.07 12:41 |
|
Това няма ли да ти свърши работа?
#include <iostream>
using namespace std;
void *ptr0 = 0;
float (*ptr1) (int, int) = 0;
int main () {
(float (*) (int, int)) ptr0;
return 0;
}
| |
Тема
|
Re: каст на указател към функция, без typedef?
[re: lxeos]
|
|
Автор |
Colombino (работен) |
Публикувано | 28.04.07 13:20 |
|
За какво ползваш std и iostream?!
На мен това няма да ми свърши работа, щото не аз съм изявил желание да каствам, но по принцип казано - не.
Това което си написал не е извикване на функция, а просто каст, което е код без ефект. Все едно да напишеш NULL; . Иначе това е синтаксисът със C-cast, ма аз пиша на C++. Той разбира се е позволен, но нежелателен.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
а, месри
[re: Colombino]
|
|
Автор | zaphod (Нерегистриран) |
Публикувано | 28.04.07 15:41 |
|
знаех си че ти няма начин да не знаеш :)
обаче се оправих и без това нещо (трябваше ми за автоматичен генератор на С код). бях се хванал да хакна едно устройство, за което автора му си мислеше че е нехакваемо, щото било базирано на фтди чип със секюрити номерче в него. сега ще ходим със злощастния разработчик да пием бира и да му разясня слабите места в защитата му
| |
Тема
|
май пробвах нещо подобно, не стана
[re: lxeos]
|
|
Автор | zaphod (Нерегистриран) |
Публикувано | 28.04.07 15:46 |
|
а сега не ми се пробва пак
| |
Тема
|
Re: май пробвах нещо подобно, не стана
[re: zaphod]
|
|
Автор | Colombino (Нерегистриран) |
Публикувано | 28.04.07 16:36 |
|
Не бе, така си е синтаксиса както го е на писал. Ма накрая требе да дереференснеш получения пойнтер както аз съм направил, иначе не дава да направиш извикване на функцията. Немам идея що така. За мен указател към функция е нещо което нема нужда от експлицитно дереференсване като указател към масив.
| |
Тема
|
Re: май пробвах нещо подобно, не стана
[re: Colombino]
|
|
Автор | zaphod (Нерегистриран) |
Публикувано | 28.04.07 21:14 |
|
верно че не съм пробвал да дереференсвам, и през ум не ми е минавало. все пак функцията се вика директно през указател, а не със референс.
| |
Тема
|
Re: каст на указател към функция, без typedef?
[re: Colombino]
|
|
Автор |
lxeos (непознат
) |
Публикувано | 28.04.07 22:50 |
|
Коломбино, постнал съм предното като отговор на Зафод, за тебе ама нищо не съм имал предвид щото ти видях поста чак след като пуснах моя.
std & iostream ги има щото моето иде си ги включва като почнеш всеки файл и в последствие копи-пейст.
Въпросът беше чисто синтактичен как се прави каст от войд пойнтер към пойнтер на функция и това беше моето предложение. Нататък вече може да си го викаш, инкрементираш и т.н.
Иначе, Зафод е прав, че C++ предлага предостатъчно за учене и много излишни неща. Кога за последно някой от вас е ползвал мутабле?
| |
Тема
|
Re: каст на указател към функция, без typedef?
[re: lxeos]
|
|
Автор |
Colombino (работен) |
Публикувано | 29.04.07 00:42 |
|
Сори, моя грешка. Не знам що съм останал с грешното впечатление че си постнал под мен.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
|
|
|