LINUX.ORG.RU

приведение типа функции


0

0
Есть указатель
int (*hrbt_cmp)(void *l, void *r);
Есть функция
int ip_cmp(t_ip_entry *l, t_ip_entry *r);

Когда я делаю
hrbt_cmp = ip_cmp
Естественно получаю варнинг о несоответствии типов,
как мне сделать приведение типа указателя
чтобы этого варнинга небыло ?

Предлагать отключать варнинг не вариант.
anonymous
Ответ на: комментарий от Slavaz
Помогло :)

Премного благодарен.
anonymous
()
Ответ на: комментарий от Slavaz
Редкий случай, когда typedef просто необходим.
anonymous
()
Если это C++, то пользоваться 'hrbt_cmp' после такого приведения нельзя. Если есть указатель на функцию типа T1, то можно привести его к указателю на функцию типа T2 и потом обратно в T1, но при этом кроме обратного приведения с представлением T2 в общем случае больше ничего нельзя делать (unspecified behavior).
erDiZz
()
Ответ на: комментарий от erDiZz
Я правильно понимаю, что это справедливо только для архитектур, где размеры указателей для разных типов могут отличаться?
Legioner ★★★★★
()
Ответ на: комментарий от Legioner
В стандарте ссылок на особенности архитектуры нет. Unspecified сразу для всех.
И потом, это требование не особо ограничивает. Можно делать так, например:

struct MyData
{
};

void callback (void *_data)
{
    MyData * const &data = static_cast <MyData*> (_data);

    /* ... */
}
erDiZz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.