Сообщения

Visual Studio unhandled exception stack trace

At work I've got the task to get a stacktrace to a thower of unhandled std exception. The first think I've tried was to print stacktrace from a terminate handler set with std::set_terminate. But I had no lack with this way because the stack is unwinded before std::terminate was called. The solution is to use windows API to get the result. Three steps to get the stacktrace:

Заметки о Gradle

Так как в сферу моих рабочих обязанностей и увлечений входит разработка нативных приложений под андроид, мне приходится взаимодействовать с Gradle. Решил написать несколько заметок для себя.

Полезности

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

Заметки делетанта Objective C

В ходе разработки кроссплатформенного движка приходится сталкиваться с Objective C. Создание подобных заметок помогает разложить информацию по полочкам и освежает память.

Модули С++

Исследовал состояние модулей на 17.11.18. Пишу эту заметку прежде всего для закрепления понимания концепции и формирования мнения. Настоящий программист C++ ведь должен иметь мнение на любую тему 😀 Статья за модули -  https://build2.org/article/cxx-modules-misconceptions.xhtml Статья против модулей -  https://izzys.casa/posts/millennials-are-killing-the-modules-ts.html

Check if class has method C++17

Hi, I've tried few options, but seems, this is the most compact code for checking if class has some method: template < typename T > static constexpr bool   hasFunction (...) { return false ; } template < typename T > static constexpr bool   hasFunction ( int , decltype (( std :: declval <T>().myFunc( float () )))* = 0 ) { return true ; } Check method availability with next constexpr condition: if constexpr ( hasFunction < MyClass >( 0 )) {       // Your code here } SFINAE above work on VS17, latest Clang and Gcc 6. I tested it only with C++17. But it should also work with C++14. Hope this help.

С++ получить имя класса без RTTI

Собственно, предисторию не помню, но помню что в голову пришла идея получать имя класса из предефайненной константы(!) __PRETTY_FUNCTION__. И еще я знаю что во многих командах разработки RTTI не приветствуется. Вот код: template < typename Type > std :: string typeName () { std :: regex regex ( "Type = ([0-9A-Za-z:<>, ]*)" ); std :: smatch match ; std :: string str ( __PRETTY_FUNCTION__ ); std :: regex_search ( str , match , regex ); return match [ 1 ]. str (); } Общая идея в том, что бы передать тип в шаблонную функцию, а потом получить имя этого типа из названии функции через регулярку. Код работает в clang и gcc. Результат я кэширую, а потому, скорость работы функции не очень важна. Возможно, я расскажу про то, как кэширую в другой статье, так как происходит это интересным способом. Вот ссылка на лучшее решение и обсуждение работы в MSVC: https://stackoverflow.com/questions/35941045/can-i-obtain-c-type-names-in...