Многие из нас пользуются отладчиком Visual Studio 2010, однако, я могу поспорить, что большинство не в курсе, что у него есть дополнительные недокументированные настройки облегчающие процесс отладки.
В этой статье я расскажу, как избавиться от постоянного попадания внутрь библиотечного кода при пошаговом Step-In выполнении. Это для затравки. Позже я опишу механизм управления представлением типов в отладочных окнах типа locals и watch (все видели, как красиво там отображаются вектора/карты и т.п.?).
Пожалуйста учтите, что основной упор будет сделан на отладку Native кода.
Еще вчера я честно думал, что разобрался как работают rvalue references в C++11. Думал до тех пор, пока не наткнулся на грабли.
Итак, я предлагаю размять мозги и попробовать написать функцию move_if_rr. Такой себе тест на понимание: успех засчитывается за функцию, которая работает правильно при условии, что Вы ее ни разу не отлаживали. Детали задания под катом.
Сегодня я хочу поделиться одним интересным приемом, который позволяет определять компилируемость любого конкретного выражения.
Пример:
/* Определяем метафункцию HasF, которая позволяет определить наличие функции f() у любого класса. */
DECLARE_IS_VALID_EXPRESSION(
HasF,
( ( U * ) NULL )->f() /* Это выражение компилируемо только если присутствует U::f() */ );
struct Foo{ void f(); };
struct Bar{};
BOOST_STATIC_ASSERT( HasF< A >::value ); /* Тут константа HasF< A >::value будет true */
BOOST_STATIC_ASSERT( !HasF< B >::value ); /* Тут константа HasF< A >::value будет false */
Как Вы уже, наверное, догадались мы будем думать как написать макрос DECLARE_IS_VALID_EXPRESSION.
В этой статье я хочу рассказать о том, как в С++ можно делать преобразование данных времени компиляции (типов) в данные времени выполнения (целые значения) и обратно.
Пример:
int nType = ...;
if( boost::is_base_of< ISettable, /* ... magically resolve type hidden by nType here ... */ >::value )
{
// Do something
}
else
{
// Do something else
}
Весь этот топик направлен на то, чтобы понять, что же надо написать вместо «magically resolve type hidden by nType here».