Блог пользователя Илья Лесной

Получить имя типа Си++. Получить имя типа в шаблоне.

Когда надо вывести имя типа (для отладки например), пользуют, объявленный в <typeinfo> оператор typedef, возвращающий специальную структуру с данными о типе (с определенными над ней операциями сравнения), для получения имени удобно обращаться к методу name() безымянного объекта.

Например возьмем какой-нибудь относительно навёрнутый тип:

  1. auto data = std::make_pair(std::string("null"),0);

И выведем его имя — оно будет таким St4pairISsiE.

Это явно не совсем то, что ожидается.
Читать далее...

Метапрограммирование. Часть 2. Продвинутый уровень.

Базовые типы

В мире метапрограммирования 11-го стандарта "под капотом" все несколько сложнее, взамен простому объявлению __is_integer добавлен шаблон std::is_integral, А взамен объявления пустых структур, как типов истинности, появляется базовый класс std::integral_constant, содержащий несколько больше данных внутри себя, а соответственно и возможностей применения. Например - оператор преобразования к типу. И уже на базе него строятся типы истинности, хотя в общем идея абсолютно та же.
Читать далее...

Метапрограммирование. Часть 1. Взгляд издалека.

Метапрограмма - программа порождающая программы. Понятие обширное, и более широкое чем поддержка метапрограммирования языками программирования (которые в той или иной степени поддерживают парадигму метапрограммирования).

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

Ссылки, правильное использование.

В Си++ ссылки, нужно использовать правильно, а не везде где только можно. А соблазниться использовать везде - легко, особенно, при начале изучения языка. Ведь - "не создаются копии переменных, а передаётся сама переменная" - полагая что так быстрее, лучше, эффективнее.

Но не все так просто, при этом всё проще некуда :)
Читать далее...

Умные указатели

На одном из собеседований мне задали вопрос про умные указатели. На тот момент, к сожалению, я не знал данный вопрос, хотя (в рамках основной теории умных указателей, так сказать азов) он очень прост. Конечно – если изучать свойства умных указателей – в полной мере это уже большой уровень познаний, но на собеседовании (по крайней мере том где я был) – нужен минимум.

А минимум заключается в следующем:
Отличия умного указателя (smart pointer) от стандартного указателя (raw pointer) в том что:

  • Умный указатель по выходу из области видимости – сам уничтожает объект, на который он указывает.

Пожалуй, это главное свойство, присущее всем разновидностям умных указателей.

  • Совместное владение.

Читать далее...

Страницы