• MSVS Lifehacks, ч.1 — Debugger. Управление пошаговым выполнением

      Многие из нас пользуются отладчиком Visual Studio 2010, однако, я могу поспорить, что большинство не в курсе, что у него есть дополнительные недокументированные настройки облегчающие процесс отладки.

      В этой статье я расскажу, как избавиться от постоянного попадания внутрь библиотечного кода при пошаговом Step-In выполнении. Это для затравки. Позже я опишу механизм управления представлением типов в отладочных окнах типа locals и watch (все видели, как красиво там отображаются вектора/карты и т.п.?).

      Пожалуйста учтите, что основной упор будет сделан на отладку Native кода.
      Читать дальше →
    • А понимаете ли Вы move семантику?

        Добрый день!

        Еще вчера я честно думал, что разобрался как работают rvalue references в C++11. Думал до тех пор, пока не наткнулся на грабли.

        Итак, я предлагаю размять мозги и попробовать написать функцию move_if_rr. Такой себе тест на понимание: успех засчитывается за функцию, которая работает правильно при условии, что Вы ее ни разу не отлаживали. Детали задания под катом.
        Читать дальше →
      • Шаблонная магия, метафункция IsValidExpression

          Доброго времени суток, уважаемое Хабрасообщество.

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

          Пример:
          /* Определяем метафункцию 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.
          Читать дальше →
        • Шаблонная магия, паттерн CallWithType

            Доброго времени суток, уважаемые Xабровчане!

            В этой статье я хочу рассказать о том, как в С++ можно делать преобразование данных времени компиляции (типов) в данные времени выполнения (целые значения) и обратно.

            Пример:
            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».
            Читать дальше →