Как получить имя типа

colibrilab
Offline
Зарегистрирован: 02.06.2017

Коллеги, добрый час.

Не могу найти как использовать функцию typeid. Необходимо сравнить типы двух переменных. Как это сделать?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Никак. Придумайте свой механизм. Например создайте классы с таким идентификатором.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, насчёт "никак" коллега погорячился, использовать-то можно. Для этого нужно отключить опцию -fno-rtti, которая по умолчанию в IDE включена.

Но это приведёт к засиранию памяти информацией обо всех типах, которые есть в программе. Оно Вам надо?

Если сильное подозрение, что на самом деле Вам это не нужно (более того, не поможет), если бы Вы объяснили нафига Вам это - может разговор бы стал более предметным.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ты чо думал, в сказку попал?  Нету здесь никаких типов, кроме byte.

colibrilab
Offline
Зарегистрирован: 02.06.2017

Я пишу небольшой скриптовый язык. Есть абстрактное синтаксическое дерево. Его узлы содержат разные классы. При очистке памяти необходимо пробежаться по дереву и вызвать деструкторы классов. Но не для всех. Поэтому и понадобилось знать тип. Конечно, можно добавить в базовый класс узлов некий признак, но не вижу смысла, если есть возможность не использовать дополнительные сущности.

colibrilab
Offline
Зарегистрирован: 02.06.2017

"Ты чо думал, в сказку попал?  Нету здесь никаких типов, кроме byte."

Купи себе гуся и рассказывай сказки ему :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам по любому надо заводить свою типизацию, поскольку типы в Вашем языке совершенно не обязаны совпадать с типами С++. Так что всё равно типизация своя.

Другое дело, Вы как-то странно собираетесь реализовывать сборку мусора. "Пробежать и освободить" - так делали в 60-ые годы прошлого века. Примерно с 80-х это делается через т.н. smart-указатели. Классическую сборку мусора ("пробежать и освободить") делают только в каких-то уникальных случаях, например, для устранения проблемы "циклических ссылок" или когда деструкторы очень ресурсоёмкие и их запуск "когда попало" нежелателен. Тогда их сапускают "когда удобно".

Смарт-указатели делаются по-разному (это идея, а не конкретная техника), но в целом можно сделать примерно так (можно и ещё 100500 способами):

1. Все объекты Вашего языка должны быть потомками одного базоваого класса, который как раз и занимается умными указателями.

2. В этом классе переопределены операторы new, delete, также определены операторы присваивания (в том числе присваивания указателям).

3. В этом классе также есть переменная - счётчик ссылок, изначально равная 0.

4. Оператор new - инициализирует обект и устанавливает счётчик ссылок в 1.

5. Любое присваивание указателя на данный объект, также увеличивает счётчик ссылок на 1

6. оператор delete сначала уменьшает счётчик ссылок на 1, затем проверяет, если получился 0, то реально уничтожает объект, а если пока ещё не 0, то ничего не делает.

Ну, примерно, всё. Там ещё есть детали, но с ними Вы столкнётесь при реализации, погуглите, разберётесь. Но в целом идея такая.

При таком подходе можно не бояться, например, брать указатель на локальный обект - он не уничтожится при выходе из блока, и можно не особо думать об свобождении памяти - она сама освободится при очередном вызове delete.

Например, вот здесь подробнее, с примерами.

toc
Offline
Зарегистрирован: 09.02.2013

colibrilab пишет:

Я пишу небольшой скриптовый язык.

для ардуины?
a готовый нужен? bitlash

Logik
Offline
Зарегистрирован: 05.08.2014

Верный признак новичка - пишет или ОС или язык или ИИ или все сразу ))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

toc пишет:
a готовый нужен? bitlash
Не кошерно! Брейнфак - наше всё!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Если что и надо городить под Ардуино, так что-то похожее Qt. По крайней мере структуру и подход.

ПС:http://www.electronics.lnu.edu.ua/fileadmin/add/flos/Book-qtC%2B%2B.pdf

colibrilab
Offline
Зарегистрирован: 02.06.2017

"a готовый нужен? bitlash"

Не нужен. Мой скриптовый язык является частью инфраструктуры контроллера для процессов ректификации. Универсализм предлагаемого Вами скриптового языка здесь совершенно не нужен. Пользователь должен оперировать понятными ему сущностями. Скрипты получаются очень короткими и легко читаемыми. Поэтому так.

colibrilab
Offline
Зарегистрирован: 02.06.2017

Всё зависит от задачи. Не нужно давать абстрактных ответов.

colibrilab
Offline
Зарегистрирован: 02.06.2017

"Верный признак новичка - пишет или ОС или язык или ИИ или все сразу ))"

Верный признак диванного психолога, который ни хрена не вник в проблему, а уже высокомерно загнул свой палец гуру )

colibrilab
Offline
Зарегистрирован: 02.06.2017

ЕвгенийП, спасибо за комментарий. Метод ясен, но в данном случае, имея дерево с объектами, проще рекурсивно обойти его узлы и удалить объекты.

Logik
Offline
Зарегистрирован: 05.08.2014

colibrilab пишет:

"Верный признак новичка - пишет или ОС или язык или ИИ или все сразу ))"

Верный признак диванного психолога, который ни хрена не вник в проблему, а уже высокомерно загнул свой палец гуру )

Я уже давно выник из тех проблем в которые Вы еще начинаете вникаете;) А знание общих закономерностей позволяет не вникать в всякую фигню. Время и силы экономит. И Вам сэкономлю, если послушаете и бросмте чепухой заниматся. Необходимость скриптового языка для ардуины очень сомнительна, а ограниченость ресурсов приведет к убогости результата. Если сильно очень хочется скрипты - берите ESP там есть lun. Вполне рабочий вариант.

 

colibrilab
Offline
Зарегистрирован: 02.06.2017

Logik пишет:

colibrilab пишет:

"Верный признак новичка - пишет или ОС или язык или ИИ или все сразу ))"

Верный признак диванного психолога, который ни хрена не вник в проблему, а уже высокомерно загнул свой палец гуру )

Я уже давно выник из тех проблем в которые Вы еще начинаете вникаете;) А знание общих закономерностей позволяет не вникать в всякую фигню. Время и силы экономит. И Вам сэкономлю, если послушаете и бросмте чепухой заниматся. Необходимость скриптового языка для ардуины очень сомнительна, а ограниченость ресурсов приведет к убогости результата. Если сильно очень хочется скрипты - берите ESP там есть lun. Вполне рабочий вариант.

 

Еще один вникатель... Я пишу для ESP8266 под Arduino IDE. Поэтому, Ваши высокомерные пасы про то, что вы вникли, выникли и видите закономерности, идут мимо. Я же не спрашивал здесь Вашего "авторитетного" мнения. Я задал конкретный вопрос. Если не знаете ответа, то лучше промолчать и не городить ерунду. Про lun, естественно, знаю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Погодите, не начинайте, за попкорном схожу ...