170 похожих чатов

30 ответов

10 просмотров

Вот такое нихрена не работает void printTypeInfo<T>(const T *obj) { const char *name = typeid(obj).name(); std::cout << "typeof(" << obj << ") = " << name << std::endl; } Пишет просто typeof(0x100a435c0) = PKv typeof(0x1009ad190) = PKv typeof(0x1009b0d38) = PKv typeof(0x1009b0cb8) = PKv typeof(0x7fd106007000) = PKv typeof(0x7fd1060086f8) = PKv

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Вот такое нихрена не работает void printTypeInfo<...

Это не в рантайме работает, а на этапе компиляции. Если хочется узнать шаблонный параметр, то есть трюк: template<typename> struct DisplayType{}; // где-нибудь DisplayType<T>{}; // где хотим увидеть тип Компилятор попробует инстанцировать шаблон, не получится, ругнётся, в ошибке напишет тип полностью и откуда так вызвали. Если же T на самом деле полиморфный и нужен динамический тип объекта в рантайме, то только typeid, причём надо его брать не от указателя, а от разыменованного указателя. Чтобы расшифровать — либа, я лично пользуюсь boost::core::demangle.

Egor Suvorov
Это не в рантайме работает, а на этапе компиляции....

Я понимаю, что выполняется мономорфизация. Я прошу подсказать решение, чтобы попросить компилятор не стирать тип после мономорфизации. И да, мне нужно именно в рантайме.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Я понимаю, что выполняется мономорфизация. Я прошу...

Компилятор и не стирает тип, просто typeid - не тот инструмент.

Alexander Karaev
Компилятор и не стирает тип, просто typeid - не то...

Я попробовал передавать в typeid разыменованный *obj, чуда не произошло. typeof(0x10e02b5c0) = v typeof(0x10df94190) = v typeof(0x10df97d38) = v typeof(0x10df97cb8) = v typeof(0x7ff3aa800000) = v typeof(0x7ff3aa8016f8) = v причём я точно знаю, что второй и третий объекты - это какой-то unordered_set. Попробую nameof, потом видно будет.

Egor Suvorov
Это не в рантайме работает, а на этапе компиляции....

И ты забыл добавить что все это ещё и работает не всегда, и по разному. Но здорово!

Alexander Karaev
Покажи вызов printTypeInfo. Там передаётся const v...

Тебе он мало поможет. Ну раз спросил, вот: fn xxx() { let unit_set = ...; unsafe { ffi::printTypeInfo(unit_set as *const ffi::Unitset as *const ffi::c_void); } }

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Тебе он мало поможет. Ну раз спросил, вот: fn xxx(...

:) Из void* нельзя достать информацию об изначальном типе.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Тебе он мало поможет. Ну раз спросил, вот: fn xxx(...

И я плохо себе представляю прокидывание шаблона через ffi, там скорее всего торчит printTypeInfo<void>, который уже точно знает, что T == void.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Тебе он мало поможет. Ну раз спросил, вот: fn xxx(...

Ты хочешь невозможного. Даже в расте же эта информация не хранит в рантайме. Проще тогда макросом создавать "класс-описатель", который знает это имя

Alexander Karaev
:) Из void* нельзя достать информацию об изначальн...

я надеялся эти объекты какие-то хвосты RTTI тащат и я могу сделать typeid с помощью nameof я надеюсь сделать переходник на C++, шаблонная функция будет в плюсовой части, а наружу будет выставляться нормальная функция.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
я надеялся эти объекты какие-то хвосты RTTI тащат ...

Шаблоны через ffi не прокинуть, если конечно не инстанцировать заранее нужный набор (но тогда смысл задачи теряется). void* хвосты не тащит. Если сделать общую полиморфную базу, то она тащить будет (typeid(*obj) даст рантайм тип)

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Там unsafe, всё нормальо 😃

Имхо, оффтоп, но пусть админы решают...

disba1ancer
Имхо, оффтоп, но пусть админы решают...

Человек дергает кресты из другого языка по ffi. Вопрос задает по крестовой части. Раст приложил на просьбу людей. Таки не совсем оффтоп, ящитаю

Пашечка
Человек дергает кресты из другого языка по ffi. Во...

Там другая проблема. Человек занимается не своим делом.

Ilya Zviagin
Из житейского опыта...

У меня есть задача, я её решаю, не больше и не меньше.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
У меня есть задача, я её решаю, не больше и не мен...

Есть ненулевая вероятность что ты не ту задачу решаешь (читай XY problem)

Kirill Bolshakov
Есть ненулевая вероятность что ты не ту задачу реш...

Есть ненулевая вероятность, что я владею контекстом, а ты ссылаешься на слишком общий, и поэтому слишком бесполезный pitfall. Такого не может быть, не? Вообще, один из самых полезных советов был от @unterumarmung , с помощью библиотеки nameof действительно разрешились некоторые из проблем: void printTypeInfo(T obj) { std::cout << "typeof(" << obj << ") = " << NAMEOF_TYPE(T) << std::endl; } typeof(0x106bd1cb8) = const s4api::Unitset * я, заметим, именно это и спрашивал в самом первом сообщении сегодня...🤷‍♂️

Kirill Bolshakov
Дак это compile time, не?

Ну теперь уже и до рантайма недалеко.

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Карта сайта