LINUX.ORG.RU

Что ты под этим понимаешь? Приведи пример кода

anonymous
()

Мне кажется что на твой вопрос смогут ответить только телепаты которые нынче в отпуске...

cvv ★★★★★
()

Ну, получить информацию о функции - члене класса (возвращаемое значение, принимаемые). Для простых функций вне классов работает, а если затолкать её в класс - отказывается.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

Ты уверен что это происходит именно в рантайме? Т.е. ты хочешь сказать, что имея void* f пойнтер на какую-то функцию(обычную,вне класса), я, используя GCC, могу в рантайме узнать все о ней? Ну покажи ты код в конце концов, сразу все лишние вопросы отпадут.

anonymous
()
Ответ на: комментарий от anonymous

> Ты уверен что это происходит именно в рантайме? Т.е. ты хочешь сказать, что имея void* f пойнтер на какую-то функцию(обычную,вне класса), я, используя GCC, могу в рантайме узнать все о ней?

во всяком случае typeid точно этого не делает (по стандарту)

When typeid is applied to an expression other than an lvalue of a polymorphic class type, the result refers to a type_info object repre- senting the static type of the expression.

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

Как такового, кода чичас нет, эксперименты пополам с баловством. На просторах инета вычитал, что с каким-то модификатором (не вспомню сейчас) возможен полноценный typeid и в runtime, но по ходу это была специфическая фишка борландской VCL.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

По поводу функций-методов могу лишь сказать, что пойнтеры на них не совсем обычные, они не помещаются в void*, потому что несут дополнительную информацию о способе применения функции к объекту. А вообще, насколько я помню, в стандарте не оговорено, что конкретно возвращает typeid (в том смысле, что имя класса, которое можно извлечь из объекта type_info компиляторозависимо), там лишь гарантируется, что для разных классов возвращается разное значение. В этом смысле, что касается обычных функций, адрес функции сам по себе, без всяких typeid, способен выполнить эту роль. Для функций-методов ситуация сложнее, хотя если изучить, как gcc представляет их адреса, то я думаю можно соорудить нечто подобное, но это уже будет компиляторозависимо (вплоть до конкретной версии компилятора) и поэтому хреново. Я думаю что существует гораздо менее кривой способ решить твою задачу, чем использование нестандатного typeid для функций-методов.

anonymous
()
Ответ на: комментарий от anonymous

> По поводу функций-методов могу лишь сказать, что пойнтеры на них не совсем обычные, они не помещаются в void*

про void* касается любых функций. Стандарт запрещает приводить к void* указатели на любые функции.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> По поводу функций-методов могу лишь сказать, что пойнтеры на них не совсем обычные, они не помещаются в void*

Если заниматься буквоедством это так, но в случае обычных функций адрес функции не помещается в void*, только тогда, когда размер адресного пространства для кода больше, чем размер адресного пространства для данных. Этого нет на подавляющем большинстве современных архитектур общего назначения. В случае функций-методов есть причины делать пойнтеры на них больше размером чем void*, т.к. одного адреса недостаточно, необходима доп. информация. И это действительно так в gcc.

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