1. О каком полиморфном типе речь? typeid возвращает type_info, если нужно получить динамический тип из указателя на базовый класс, то static_cast/dynamic_cast. В мкл это доступно, а имя типа можно получить через typename.
dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.
typename задумано просто для типа переменной, насколько я понимаю. Поэтому нужна дополнительная фича. Да и я же не говорил о том, чтобы портировать typeid в нативном виде. Речь шла просто об аналогичом функционале. И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)
dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.
typename задумано просто для типа переменной, насколько я понимаю. Поэтому нужна дополнительная фича. Да и я же не говорил о том, чтобы портировать typeid в нативном виде. Речь шла просто об аналогичом функционале. И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)
А вас в нынешнем typename ничего не смущает? На мой взгляд, typename реализован просто криво, и это надо править. Нужно определиться - что он возвращает? Статический тип (аналог decltype) или динамический (type_info.name())?
class B{};
class Q:public B{};
voidOnStart() {
Q q;
B *b = &q;
Alert( typename(*b) ); // B
}
Видно, что статический, а значит логично разрешить
typename(var) new_var;
но нет, нельзя. В итоге текущий typename является как недо_decltype, так и недо_type_info::name(). Возможно, ему следует выдавать динамический тип (Q), это будет то, что ищите.
На графике всё верно отображается. Каким образом вы пришли к таким выводам? Или во время оптимизации заполнение индикаторных буферов осуществляется, как-то иначе? Поэтому результаты не соответствуют?
Anatoli Kazharski: На графике всё верно отображается. Каким образом вы пришли к таким выводам? Или во время оптимизации заполнение индикаторных буферов осуществляется, как-то иначе? Поэтому результаты не соответствуют?
Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.
Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.
Нужно изобрести метод, с помощью которого можно точно доказать это.
А это одна из комбинаций, когда буферы не будут заполнены: Condition1 = true, Condition2 = false, Condition3 = false.
Да, текущее значение при увеличении буферов нужно принудительно обнулять, если все условия не исполняются. Я сообщу о результате, когда внесу исправления и проведу тесты.
Andrey Khatimlianskii: В 71 или 72 билде поломали что-то в оптимизаторе — возвращает не то, что тестер. К сожалению, собирать минимальный воспроизводимый пример времени нет.
1. О каком полиморфном типе речь? typeid возвращает type_info, если нужно получить динамический тип из указателя на базовый класс, то static_cast/dynamic_cast. В мкл это доступно, а имя типа можно получить через typename.
dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.
typename задумано просто для типа переменной, насколько я понимаю. Поэтому нужна дополнительная фича. Да и я же не говорил о том, чтобы портировать typeid в нативном виде. Речь шла просто об аналогичом функционале. И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)
Пока могу только сказать, что раз Ваш индикатор выдает следующее
...
dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.
typename задумано просто для типа переменной, насколько я понимаю. Поэтому нужна дополнительная фича. Да и я же не говорил о том, чтобы портировать typeid в нативном виде. Речь шла просто об аналогичом функционале. И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)
Видно, что статический, а значит логично разрешить
typename(var) new_var;
но нет, нельзя. В итоге текущий typename является как недо_decltype, так и недо_type_info::name(). Возможно, ему следует выдавать динамический тип (Q), это будет то, что ищите.
Поэтому нужна дополнительная фича
...
ЗЫ Такой код не заполняет все индикаторные буферы
Отсюда в индикаторных буферах случайные значения.
На графике всё верно отображается. Каким образом вы пришли к таким выводам? Или во время оптимизации заполнение индикаторных буферов осуществляется, как-то иначе? Поэтому результаты не соответствуют?
Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.
Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.
Нужно изобрести метод, с помощью которого можно точно доказать это.
Вот Ваша схема
А это одна из комбинаций, когда буферы не будут заполнены: Condition1 = true, Condition2 = false, Condition3 = false.
Вот Ваша схема
А это одна из комбинаций, когда буферы не будут заполнены: Condition1 = true, Condition2 = false, Condition3 = false.
В 71 или 72 билде поломали что-то в оптимизаторе — возвращает не то, что тестер. К сожалению, собирать минимальный воспроизводимый пример времени нет.