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

30 ответов

14 просмотров

Вот такое нихрена не работает 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, не?

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта