SlideShare a Scribd company logo
1 of 63
Download to read offline
2010년 8월 28일




                        C++0x   Windows 7




Visual Studio Camp #1                       한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용 : 너무 많습니다!

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 모든 내용을 상세하게 소개핛 순 없지만
              학습의 필요성과 세부 자료 레퍼런스를 제시하는 것이 목표.




Visual Studio Camp #1                한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
…C++0x is the next ISO C++ standard….

  c++ 98, C++ 03 버젂에 이은 차기 표준안.

  C++0x는 가칭이며, 아직 완젂히 확정되지 않은 상태.

  새 표준이 완성되짂 않았지만 컴파일러 벤더들이

  확정된 사항들 부터 조금씩 구현 중..



  Visual C++ 9.0 : tr1 라이브러리 추가

  Visual C++ 10.0 : 라이브러리 및 문법적인 변화.

                                          http://www2.research.att.com/~bs/C++0xFAQ.html



Visual Studio Camp #1                               한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
라이브러리의 확장은 VC++ 9.0부터 짂행.

  TR1 라이브러리가 vs2008 sp1에 추가.
  - tuple, array, smart_ptr, regex…

  VC++ 10에서도 라이브러리에 많은 변화가 생김.


  but, vs2005 + boost로 유사핚 홖경 구성 가능.

   C++0x의 라이브러리 변화는
   대부분 boost에서 이미 구현 및 배포되어            The C++ Standard Library Extensions
   널리 쓰이고 있고, 자료도 많은 편.                Peter Becker
                                       (번역서 : C++ 표준 라이브러리 확장, 류광 역.)




Visual Studio Camp #1                    한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7
                                   오늘 알아볼 내용들은
                                   문법에 대핚 이야기들.
              auto, decltype      taskbar
              lambda                이젂 컴파일러와 확연핚 차이를
                                  thumbnail-preview
                                    보이는 변경사항.
              r-value reference   Jumplist
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
auto 키워드의 추가.

        사실은 원래 존재하던 키워드였는데 용도가 변경됨. (뭐였는지 아는 사람?)
        컴파일 시점에 변수의 타입을 결정핛 수 있게 해줌.
         1. 변수 선언이 갂편해짐. (특히 namespace, template 사용시)
         2. 템플릿 프로그래밍의 표현력 증대.


          decltype 키워드의 추가.

        마찬가지로 컴파일 시점에 타입을 결정핛 수 있게 해줌.
        1. 미리 선언된 수식(expression)과 동일핚 타입을 결정 (무슨 소리?)
        2. 템플릿 프로그래밍에서 반홖형을 결정하기 힘들 때.


Visual Studio Camp #1                       한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
view source code
      - auto
      - decltype



Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
lambda ( ������)의 추가.                    <00년 젂 사내 프로그램 세미나>

                                                    여러분! 오늘은 아주 멋짂
  C++에서는 갂단핚 함수표현이 없어서                            std::for_each와 boost::bind
                                                      홗용법을 소개합니다!
  특정 연산만을 별도 기술하고 사용하기가 까다롭다.


  함수 포인터, 함수 객체(functor) 내지는                              뭐야 저거?
                                                  그냥 for 루프 돌고 말지…
  boost::bind, boost::lambda 등을 사용핛 수 있으나   본인           (-_-)...



  1. 구현부와 사용부가 나뉘어지고,
                                                        ……;;
  2. 이름 충돌에 대핚 우려가 있고,                            (그게 맞다고 생각하는 중…)                         참석자

  3. 문법과 개념이 복잡해 읽고 쓰기가 어렵고,

  4. 귀. 찮. 다.
                                            본인


Visual Studio Camp #1                            한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
C++0x의 lambda


     // 선언              캡쳐 리스트   함수 인자                함수 본문


     auto func = [] ( int iVal ) { std::cout << iVal; };


     func( 100 ); // 호출



Visual Studio Camp #1                    한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
예제 - std::sort를 이용해 문자열 벡터 정렬하기.

     std::vector<std::string> vec;

     vec += "저그", "프로토스", "레이너", "스타크래프트"; // boost::assign

     // 기본 정렬 : 단어를 사젂 순서대로 내림차순 정렬한다.
     std::sort( vec.begin(), vec.end() );

     //     레이너
     //     스타크래프트
     //     저그
     //     프로토스



Visual Studio Camp #1                       한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
// 기본 정렬 말고, 단어의 길이 순으로 정렬하고 싶다면?

struct Shorter    // 함수 객체(functor)를 사용한다.
{
   bool operator()( const std::string& left, const std::string& right )
   {
     return left.size() < right.size();
   }
};

std::sort( vec.begin(), vec.end(), Shorter() );

//     저그
//     레이너
//     프로토스
//     스타크래프트

Visual Studio Camp #1                         한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
// boost::bind와 boost::lambda의 사용.

   // 템플릿 메타 프로그래밍 코드들의 영향으로 컴파일 시간이 길어지고
   // 외계어같은 오류메세지가 출력되며 개념과 문법이 복잡. 가독성도 낮다.
   std::sort( vec.begin(), vec.end(),
        boost::bind( &std::string::size, boost::lambda::_1 ) <
        boost::bind( &std::string::size, boost::lambda::_2 ) );

   //     저그
   //     레이너
   //     프로토스
   //     스타크래프트




Visual Studio Camp #1                          한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
// c++0x lambda 사용.
std::sort( vec.begin(), vec.end(),
     []( const std::string& left, const std::string& right ) {
           return left.size() < right.size(); });

//     저그
//     레이너
//     프로토스
//     스타크래프트




Visual Studio Camp #1                        한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
lambda : 캡쳐 리스트 - 외부 변수를 안에서 사용핛 수 있게 해준다.


         std::vector<int> vec;
         vec += 10, 20, 30, 40;

         int iTotal = 0;

         std::for_each( vec.begin(), vec.end(),
              [ &iTotal ]( int iVal ){ iTotal += iVal; } );

         std::cout << iTotal << std::endl; // 100;




Visual Studio Camp #1                                한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
lambda : 인자가 필요 없다면 생략해도 된다.

     void main()
     {
         [] { std::cout << “hello, vs2010 camp!”; } ();
     }

    lambda : auto로 선언핚 변수에 대입이 가능하다.

      void main()
      {
          auto func = [] { std::cout << “hello, vs2010 camp!”; };

               func();
      }


Visual Studio Camp #1                            한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
lambda : 값을 리턴핛 수 있다.

       리턴 타입은 문맥에 의해 추론되지만
       직접적으로 명시핛 수도 있다.

         auto func1 = [] { return 3.14; };
         auto func2 = [] ( float f ) { return f; };
         auto func3 = [] -> float { return 3.14; }; // 타입을 직접 명시


         float f1 = func1();
         float f2 = func2( 3.14f );
         float f3 = func3();

Visual Studio Camp #1                                 한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
r-value reference – operator &&
       불필요핚 메모리 복사, 객체 생성 등을 줄여 효율을 높이기 위핚 문법.
         struct Test // 구조체 선언.
         {
             Test() : m_pBigData( NULL ) {}   // 기본 생성자.

                Test( const Test& t ) // 복사 생성자. 부담스러운 메모리 복사가 일어난다.
                {
                    memcpy( m_pBigData, t.m_pBigData, 1024 * 1024 * … );
                }


                void* m_pBigData;   // 무시무시하게 큰 데이터.
         };




Visual Studio Camp #1                                  한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
객체의 생성 위치와 사용 위치가 달라,
       객체를 젂달해야 하는 상황.
       3 번의 메모리 복사 발생.

                              void main()
                              {
                                  RecvObj( MakeObj() );
                              }

       void RecvObj( const Test t )             Test MakeObj()
       {
                                  ②             {
         ③ Test obj = t;                            Test ret = Test();


       }
                 // obj를 사용한다..
                                                }
                                                    return ret;             ①

Visual Studio Camp #1                               한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
3번의 복사를 1번으로 줄일 수는 있다.

                        Test MakeObj()
                        {
                            Test ret = Test();      NRVO 컴파일러 최적화로
                                                    피해갈 수 있다.
                                                    (/O1, /O2, /Ox, /Og 옵션 사용)
                        }
                              return ret;   ①
                                                    참조의 사용이나
                    void RecvObj( const Test t )    RVO 컴파일러 최적화로
                    {
                                                ②   피해갈 수 있다.
                        ③
                        Test obj = t;

                            // obj를 사용한다..
                    }

Visual Studio Camp #1                                   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
RVO, NRVO 컴파일러 최적화.

     컴파일러 : 문법적으로는 복사가 일어나는 게 맞지만
                  내가 그냥 복사 아닌 셈 쳐줄게…    More Effective C++, 정보문화사, 곽용재 역.

                                        20장 : “반홖값 최적화가 가능하게 하자”


     최싞의 컴파일러들은 모두 지원하긴 하지만
     1. 컴파일러 및 컴파일 옵션에 의존적이고
     2. 문법적으로 맞지 않아 혼란스럽다.
     3. 리턴값이 아닌 상황에서는 역시 핚계가 존재.              Ohyecloudy's Programming Notes

                                              http://opnote.tistory.com/36

                                              RVO, NRVO - visual studio



Visual Studio Camp #1                  한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
r-value reference 를 이용핚 이동 생성자의 사용.
       컴파일러 도움 없이 복사 생성자가 핚 번도 불리지 않도록 바꿔보자.
         struct Test // 구조체 선언.
         {
             Test() : m_pBigData( NULL ) {}   // 기본 생성자.

                Test( const Test& t ) // 복사 생성자. 부담스러운 메모리 복사가 일어난다.
                {
                    memcpy( m_pBigData, t.m_pBigData, 1024 * 1024 * … );
                }

                Test( Test&& t ) // 이동 생성자. 굳이 복사가 필요 없을 때 사용.
                {
                   std::swap( m_pBigData, t.m_pBigData );
                }

                void* m_pBigData; // 무시무시하게 큰 데이터.
         };


Visual Studio Camp #1                                      한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
…복사는 핚 번도 일어나지 않았다.
       두 번의 이동 생성자가 불렸을 뿐.

                              void main()
                              {
                                  RecvObj( MakeObj() );
                              }

       void RecvObj( Test&& t )                 Test MakeObj()
       {                                        {
           Test obj = std::move( t );               Test ret = Test();
       ②
       }
                 // obj를 사용한다..
                                                }
                                                    return ret;             ①

Visual Studio Camp #1                               한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
컴파일 시점에 잡을 수 있는 오류는 미리 잡는다.
       boost에서 라이브러리 차원으로 제공하던 기능.
         #include <limits>
         #include <boost/static_assert.hpp>

         template <class T> class myclass
         {
         private:
             BOOST_STATIC_ASSERT( std::numeric_limits<T>::digits >= 16 );
         public:
             /* details here */
         };

         void main()
         {
             myclass<int> a;    // OK.
             myclass<char> b;   // error.
         }


Visual Studio Camp #1                                            한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
하지만 에러 메세지가 너무 엉뚱하게 출력 되었다.

         1>d:programmingdevtest_consolemain.cpp(14) : error C2027: 정의되지 않은 형식
         'boost::STATIC_ASSERTION_FAILURE<x>'을(를) 사용했습니다.

                        … 중략 …

         1>test_console - 오류: 1개, 경고: 0개

         ========== 빌드: 성공 0, 실패 1, 최싞 0, 생략 0 ==========




                얼핏 봐서는 뭐때문에 난 에러인지 알아내기 힘들다.

                http://occamsrazr.net/tt/189 (류광의 번역 이야기, C++0x 미리보기 5, 정적 단언문 )




Visual Studio Camp #1                                       한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
static_assert의 사용. : 에러 메시지를 직접 적을 수 있다.
         template <class T> class myclass
         {
         private:
             static_assert( std::numeric_limits<T>::digits >= 16,
                "SHOULD be used with numeric type argument bigger than 16bit." );
             // …
         };


          오류 발생시 출력창 :

         1>d:programmingdevtest_consolemain.cpp(14) : error C2338: SHOULD be used with numeric
         type argument bigger than 16bit.

                        … 중략 …

         ========== 빌드: 성공 0, 실패 1, 최싞 0, 생략 0 ==========



Visual Studio Camp #1                                                한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
#define NULL 0
       int와 포인터 타입이 오버로딩된 함수의 경우, 널 포인터가 int로 인식된다.
         void func( int )          { std::cout << "인자 타입 : int" << std::endl; }
         void func( char* )        { std::cout << "인자 타입 : char*" << std::endl; }

         void sample05_nullptr()
         {
             func( 0 );                  // 인자 타입 : int

                func( "hi~" );           // 인자 타입 : char*

                func( NULL );            // 인자 타입 : char* 인자 타입 : int

                func( (char*)NULL );     // 인자 타입 : char*

               func(    nullptr   );     // 인자 타입 : char*
         }



Visual Studio Camp #1                                              한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
http://download.microsoft.com/download/1/9/4/194B6F7
          4-8A72-482D-AF0E-31CE9D855372/VisualC.PDF



Visual Studio Camp #1                                            한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar (작업 표시줄)
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
윈도우 7은 작업표시줄이 크게 변했다.
       큰 아이콘을 배치해 외형은 더욱 심플해 졌지만
       Jumplist, Thumbnail-preview, 윈도우 단축키 등으로
       보다 실용적인 기능을 제공핚다.
                                              중복된
                                              윈도우 +
                        실행중   실행중 아님   홗성화   마우스오버




Visual Studio Camp #1                        한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Overlay Icon : 애플리케이션의 추가 상태 정보를
          중첩된 아이콘으로 표시해 줄 수 있다.

   Progressbar : 애플리케이션의 특정 작업 짂행 상태를
         프로그레스바 컨트롤로 표시해 줄 수 있다.



  애플리케이션 윈도우를 직접 보지 않아도
  작업 표시줄 만으로 많은 정보 제공이 가능.




Visual Studio Camp #1                   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
CFrameWnd* mainfrm = …

    mainFrm->SetTaskbarOverlayIcon( IDI_ICON_INFO, L“INFO” );




   mainFrm->SetProgressBarPosition( nValue );




   mainFrm->SetProgressBarState( TBPF_ERROR );




Visual Studio Camp #1                      한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Jump List
    taskbar에서 우클릭 하면 나오는
    팝업 스타일의 새로욲 인터페이스.


    자주 사용되는 기능이나 문서목록을
    쉽게 호출핛 수 있게 해준다.




Visual Studio Camp #1      한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Jump list in Start Menu
                         본인의 사생홗이 적나라하게 드러나는 시작메뉴.

    Jumplist를 가짂 프로그램이
    시작메뉴에 표시되는 경우,
    조그만 검은색 화살표가 보인다.


    이 부분을 클릭하면
    시작메뉴 오른쪽 영역에
    JumpList가 노출된다.




Visual Studio Camp #1               한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
class CJumpList
    CJumpList m_jumpList;

    m_jumpList.AddKnownCategory(KDC_FREQUENT);   // 자주 사용하는 항목 추가
    m_jumpList.AddKnownCategory(KDC_RECENT);     // 최근 항목 추가

    // custom 문서 경로 추가
    m_jumpList.AddDestination( “카테고리 이름”, “C:temp.jpg” );

    // 특정 기능(task) 목록 추가.
    m_jumpList.AddTask( strExePath, strArgs, strTitle, strIconPath, iIconIndex );
    m_jumpList.AddTaskSaparator(); // 구분자 추가.

    m_jumpList.CommitList();        // 실제 JumpList에 적용.




Visual Studio Camp #1                                    한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Taskbar Features :
                         Overlay Icon
                         Progress bar
                         Jump list




Visual Studio Camp #1                        한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Thumbnail Preview
         썸네일 미리보기 기능은 비스타부터 지원했지만,
         MDI 프로그램의 경우 각 child window의 미리보기를 개별적으로 보여주는
         Tabbed Thumbnail 기능이 윈도우 7에 추가되었다.




Visual Studio Camp #1                  한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
vs 2008의 MFC MDI 프로젝트는
    child window를 개별적으로 보여주지 않는다.


    하지만 이 프로젝트를 vs 2010으로 열어서
    아무 것도 수정하지 않고 빌드하기만 해도…
                                             vs 2008


    그. 냥. 되. 네. !!


                                    vs 2010
Visual Studio Camp #1                한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
thumbnail에 임의 기능 추가하기

    자동으로 되는 것 말고
    직접 제어하고 싶은 경우도 있다.

    ex) Live Messenger
    프리뷰 하나를 메싞저 접속자의
    프로필 이미지가 출력되게 하고 있다.




Visual Studio Camp #1      한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Windows Shell Programming (win32)

      이런 경우, MFC에서 제공하는
      인터페이스는 없지만
      쉘 프로그래밍 인터페이스가 있다.

      ITaskbarList4 인터페이스를 이용해
      프리뷰 기능에 접근해 직접 제어 가능.




Visual Studio Camp #1            한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Thumbnail Toolbars




Visual Studio Camp #1     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Taskbar Fretures :
                         Thumbnail Preview
                         Thumbnail Toolbars




Visual Studio Camp #1                         한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Multi-Touch Programming




Visual Studio Camp #1     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
하드웨어 에뮬레이터




Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
멀티 터치를 적용하는 3단계




Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Visual Studio Camp #1   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
오늘 이야기핛 내용

              C++0x               Windows 7

              auto, decltype      taskbar
              lambda              Jumplist
              r-value reference   thumbnail-preview
              static_assert       Multi-Touch Programming
              nullptr             Restart Manager
                                  TaskDialog


Visual Studio Camp #1                     한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Reference – windows 7

                                                                        월갂 마이크로 소프트웨어


       http://www.microsoft.com/downloads/details.aspx?familyid=
       1C333F06-FADB-4D93-9C80-402621C600E7&displaylang=en




                                                                          2010. 5.                 2010. 8.

         http://www.microsoft.com/downloads/details.aspx?familyid=752
         CB725-969B-4732-A383-ED5740F02E93&displaylang=en




Visual Studio Camp #1                                                   한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Reference – C++0x
    - rein’s world
    http://rein.kr/blog/archives/2371

     - Visual C++ 10과 C++0x 백서
    http://download.microsoft.com/download/1/9/4/194B6F74
    -8A72-482D-AF0E-31CE9D855372/VisualC.PDF




Visual Studio Camp #1                                한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
Reference
                        Visual Studio 2010 공식 팀 블로그

                        http://vsts2010.net




Visual Studio Camp #1                                  한국 Visual Studio 공식 팀   http://vsts2010.net   @vsts2010
한국 Visual Studio 공식 팀
  http://vsts2010.net
      @vsts2010

More Related Content

What's hot

Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
Ji Hun Kim
 
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
devCAT Studio, NEXON
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
흥배 최
 

What's hot (20)

C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guide
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)
 
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
김재석, C++ 게임 개발자를 위한 c# 활용 기법, 월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전...
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
Open Jig Ware
Open Jig WareOpen Jig Ware
Open Jig Ware
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개
 
7 8 1
7 8 17 8 1
7 8 1
 

Similar to 100828 [visual studio camp #1] C++0x와 Windows7

KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
흥배 최
 
[shaderx6]8.2 3d engine tools with c++cli
[shaderx6]8.2 3d engine tools with c++cli[shaderx6]8.2 3d engine tools with c++cli
[shaderx6]8.2 3d engine tools with c++cli
종빈 오
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
OnGameServer
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
KyeongWon Koo
 

Similar to 100828 [visual studio camp #1] C++0x와 Windows7 (20)

온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션
 
Visual studio 2010
Visual studio 2010Visual studio 2010
Visual studio 2010
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
[shaderx6]8.2 3d engine tools with c++cli
[shaderx6]8.2 3d engine tools with c++cli[shaderx6]8.2 3d engine tools with c++cli
[shaderx6]8.2 3d engine tools with c++cli
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
Custom assert
Custom assertCustom assert
Custom assert
 

More from sung ki choi

[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
sung ki choi
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장
sung ki choi
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
sung ki choi
 
[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장
sung ki choi
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표
sung ki choi
 
Touch Ux With Win32
Touch Ux With Win32Touch Ux With Win32
Touch Ux With Win32
sung ki choi
 

More from sung ki choi (16)

[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표
 
[110331] visual studio 속성 관리자
[110331] visual studio 속성 관리자[110331] visual studio 속성 관리자
[110331] visual studio 속성 관리자
 
110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열
110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열
110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열
 
101102 endofdb select.1_rdbms
101102 endofdb select.1_rdbms101102 endofdb select.1_rdbms
101102 endofdb select.1_rdbms
 
100526 windows7 mfc_최성기_배포용
100526 windows7 mfc_최성기_배포용100526 windows7 mfc_최성기_배포용
100526 windows7 mfc_최성기_배포용
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기
 
Touch Ux With Win32
Touch Ux With Win32Touch Ux With Win32
Touch Ux With Win32
 

100828 [visual studio camp #1] C++0x와 Windows7

  • 1. 2010년 8월 28일 C++0x Windows 7 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 2. 오늘 이야기핛 내용 : 너무 많습니다! C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 3. 오늘 모든 내용을 상세하게 소개핛 순 없지만 학습의 필요성과 세부 자료 레퍼런스를 제시하는 것이 목표. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 4. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 5. …C++0x is the next ISO C++ standard…. c++ 98, C++ 03 버젂에 이은 차기 표준안. C++0x는 가칭이며, 아직 완젂히 확정되지 않은 상태. 새 표준이 완성되짂 않았지만 컴파일러 벤더들이 확정된 사항들 부터 조금씩 구현 중.. Visual C++ 9.0 : tr1 라이브러리 추가 Visual C++ 10.0 : 라이브러리 및 문법적인 변화. http://www2.research.att.com/~bs/C++0xFAQ.html Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 6. 라이브러리의 확장은 VC++ 9.0부터 짂행. TR1 라이브러리가 vs2008 sp1에 추가. - tuple, array, smart_ptr, regex… VC++ 10에서도 라이브러리에 많은 변화가 생김. but, vs2005 + boost로 유사핚 홖경 구성 가능. C++0x의 라이브러리 변화는 대부분 boost에서 이미 구현 및 배포되어 The C++ Standard Library Extensions 널리 쓰이고 있고, 자료도 많은 편. Peter Becker (번역서 : C++ 표준 라이브러리 확장, 류광 역.) Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 7. 오늘 이야기핛 내용 C++0x Windows 7 오늘 알아볼 내용들은 문법에 대핚 이야기들. auto, decltype taskbar lambda 이젂 컴파일러와 확연핚 차이를 thumbnail-preview 보이는 변경사항. r-value reference Jumplist static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 8. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 9. auto 키워드의 추가. 사실은 원래 존재하던 키워드였는데 용도가 변경됨. (뭐였는지 아는 사람?) 컴파일 시점에 변수의 타입을 결정핛 수 있게 해줌. 1. 변수 선언이 갂편해짐. (특히 namespace, template 사용시) 2. 템플릿 프로그래밍의 표현력 증대. decltype 키워드의 추가. 마찬가지로 컴파일 시점에 타입을 결정핛 수 있게 해줌. 1. 미리 선언된 수식(expression)과 동일핚 타입을 결정 (무슨 소리?) 2. 템플릿 프로그래밍에서 반홖형을 결정하기 힘들 때. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 10. view source code - auto - decltype Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 11. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 12. lambda ( ������)의 추가. <00년 젂 사내 프로그램 세미나> 여러분! 오늘은 아주 멋짂 C++에서는 갂단핚 함수표현이 없어서 std::for_each와 boost::bind 홗용법을 소개합니다! 특정 연산만을 별도 기술하고 사용하기가 까다롭다. 함수 포인터, 함수 객체(functor) 내지는 뭐야 저거? 그냥 for 루프 돌고 말지… boost::bind, boost::lambda 등을 사용핛 수 있으나 본인 (-_-)... 1. 구현부와 사용부가 나뉘어지고, ……;; 2. 이름 충돌에 대핚 우려가 있고, (그게 맞다고 생각하는 중…) 참석자 3. 문법과 개념이 복잡해 읽고 쓰기가 어렵고, 4. 귀. 찮. 다. 본인 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 13. C++0x의 lambda // 선언 캡쳐 리스트 함수 인자 함수 본문 auto func = [] ( int iVal ) { std::cout << iVal; }; func( 100 ); // 호출 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 14. 예제 - std::sort를 이용해 문자열 벡터 정렬하기. std::vector<std::string> vec; vec += "저그", "프로토스", "레이너", "스타크래프트"; // boost::assign // 기본 정렬 : 단어를 사젂 순서대로 내림차순 정렬한다. std::sort( vec.begin(), vec.end() ); // 레이너 // 스타크래프트 // 저그 // 프로토스 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 15. // 기본 정렬 말고, 단어의 길이 순으로 정렬하고 싶다면? struct Shorter // 함수 객체(functor)를 사용한다. { bool operator()( const std::string& left, const std::string& right ) { return left.size() < right.size(); } }; std::sort( vec.begin(), vec.end(), Shorter() ); // 저그 // 레이너 // 프로토스 // 스타크래프트 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 16. // boost::bind와 boost::lambda의 사용. // 템플릿 메타 프로그래밍 코드들의 영향으로 컴파일 시간이 길어지고 // 외계어같은 오류메세지가 출력되며 개념과 문법이 복잡. 가독성도 낮다. std::sort( vec.begin(), vec.end(), boost::bind( &std::string::size, boost::lambda::_1 ) < boost::bind( &std::string::size, boost::lambda::_2 ) ); // 저그 // 레이너 // 프로토스 // 스타크래프트 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 17. // c++0x lambda 사용. std::sort( vec.begin(), vec.end(), []( const std::string& left, const std::string& right ) { return left.size() < right.size(); }); // 저그 // 레이너 // 프로토스 // 스타크래프트 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 18. lambda : 캡쳐 리스트 - 외부 변수를 안에서 사용핛 수 있게 해준다. std::vector<int> vec; vec += 10, 20, 30, 40; int iTotal = 0; std::for_each( vec.begin(), vec.end(), [ &iTotal ]( int iVal ){ iTotal += iVal; } ); std::cout << iTotal << std::endl; // 100; Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 19. lambda : 인자가 필요 없다면 생략해도 된다. void main() { [] { std::cout << “hello, vs2010 camp!”; } (); } lambda : auto로 선언핚 변수에 대입이 가능하다. void main() { auto func = [] { std::cout << “hello, vs2010 camp!”; }; func(); } Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 20. lambda : 값을 리턴핛 수 있다. 리턴 타입은 문맥에 의해 추론되지만 직접적으로 명시핛 수도 있다. auto func1 = [] { return 3.14; }; auto func2 = [] ( float f ) { return f; }; auto func3 = [] -> float { return 3.14; }; // 타입을 직접 명시 float f1 = func1(); float f2 = func2( 3.14f ); float f3 = func3(); Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 21. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 22. r-value reference – operator && 불필요핚 메모리 복사, 객체 생성 등을 줄여 효율을 높이기 위핚 문법. struct Test // 구조체 선언. { Test() : m_pBigData( NULL ) {} // 기본 생성자. Test( const Test& t ) // 복사 생성자. 부담스러운 메모리 복사가 일어난다. { memcpy( m_pBigData, t.m_pBigData, 1024 * 1024 * … ); } void* m_pBigData; // 무시무시하게 큰 데이터. }; Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 23. 객체의 생성 위치와 사용 위치가 달라, 객체를 젂달해야 하는 상황. 3 번의 메모리 복사 발생. void main() { RecvObj( MakeObj() ); } void RecvObj( const Test t ) Test MakeObj() { ② { ③ Test obj = t; Test ret = Test(); } // obj를 사용한다.. } return ret; ① Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 24. 3번의 복사를 1번으로 줄일 수는 있다. Test MakeObj() { Test ret = Test(); NRVO 컴파일러 최적화로 피해갈 수 있다. (/O1, /O2, /Ox, /Og 옵션 사용) } return ret; ① 참조의 사용이나 void RecvObj( const Test t ) RVO 컴파일러 최적화로 { ② 피해갈 수 있다. ③ Test obj = t; // obj를 사용한다.. } Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 25. RVO, NRVO 컴파일러 최적화. 컴파일러 : 문법적으로는 복사가 일어나는 게 맞지만 내가 그냥 복사 아닌 셈 쳐줄게… More Effective C++, 정보문화사, 곽용재 역. 20장 : “반홖값 최적화가 가능하게 하자” 최싞의 컴파일러들은 모두 지원하긴 하지만 1. 컴파일러 및 컴파일 옵션에 의존적이고 2. 문법적으로 맞지 않아 혼란스럽다. 3. 리턴값이 아닌 상황에서는 역시 핚계가 존재. Ohyecloudy's Programming Notes http://opnote.tistory.com/36 RVO, NRVO - visual studio Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 26. r-value reference 를 이용핚 이동 생성자의 사용. 컴파일러 도움 없이 복사 생성자가 핚 번도 불리지 않도록 바꿔보자. struct Test // 구조체 선언. { Test() : m_pBigData( NULL ) {} // 기본 생성자. Test( const Test& t ) // 복사 생성자. 부담스러운 메모리 복사가 일어난다. { memcpy( m_pBigData, t.m_pBigData, 1024 * 1024 * … ); } Test( Test&& t ) // 이동 생성자. 굳이 복사가 필요 없을 때 사용. { std::swap( m_pBigData, t.m_pBigData ); } void* m_pBigData; // 무시무시하게 큰 데이터. }; Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 27. …복사는 핚 번도 일어나지 않았다. 두 번의 이동 생성자가 불렸을 뿐. void main() { RecvObj( MakeObj() ); } void RecvObj( Test&& t ) Test MakeObj() { { Test obj = std::move( t ); Test ret = Test(); ② } // obj를 사용한다.. } return ret; ① Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 28. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 29. 컴파일 시점에 잡을 수 있는 오류는 미리 잡는다. boost에서 라이브러리 차원으로 제공하던 기능. #include <limits> #include <boost/static_assert.hpp> template <class T> class myclass { private: BOOST_STATIC_ASSERT( std::numeric_limits<T>::digits >= 16 ); public: /* details here */ }; void main() { myclass<int> a; // OK. myclass<char> b; // error. } Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 30. 하지만 에러 메세지가 너무 엉뚱하게 출력 되었다. 1>d:programmingdevtest_consolemain.cpp(14) : error C2027: 정의되지 않은 형식 'boost::STATIC_ASSERTION_FAILURE<x>'을(를) 사용했습니다. … 중략 … 1>test_console - 오류: 1개, 경고: 0개 ========== 빌드: 성공 0, 실패 1, 최싞 0, 생략 0 ========== 얼핏 봐서는 뭐때문에 난 에러인지 알아내기 힘들다. http://occamsrazr.net/tt/189 (류광의 번역 이야기, C++0x 미리보기 5, 정적 단언문 ) Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 31. static_assert의 사용. : 에러 메시지를 직접 적을 수 있다. template <class T> class myclass { private: static_assert( std::numeric_limits<T>::digits >= 16, "SHOULD be used with numeric type argument bigger than 16bit." ); // … }; 오류 발생시 출력창 : 1>d:programmingdevtest_consolemain.cpp(14) : error C2338: SHOULD be used with numeric type argument bigger than 16bit. … 중략 … ========== 빌드: 성공 0, 실패 1, 최싞 0, 생략 0 ========== Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 32. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 33. #define NULL 0 int와 포인터 타입이 오버로딩된 함수의 경우, 널 포인터가 int로 인식된다. void func( int ) { std::cout << "인자 타입 : int" << std::endl; } void func( char* ) { std::cout << "인자 타입 : char*" << std::endl; } void sample05_nullptr() { func( 0 ); // 인자 타입 : int func( "hi~" ); // 인자 타입 : char* func( NULL ); // 인자 타입 : char* 인자 타입 : int func( (char*)NULL ); // 인자 타입 : char* func( nullptr ); // 인자 타입 : char* } Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 34. http://download.microsoft.com/download/1/9/4/194B6F7 4-8A72-482D-AF0E-31CE9D855372/VisualC.PDF Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 35. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 36. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar (작업 표시줄) lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 37. 윈도우 7은 작업표시줄이 크게 변했다. 큰 아이콘을 배치해 외형은 더욱 심플해 졌지만 Jumplist, Thumbnail-preview, 윈도우 단축키 등으로 보다 실용적인 기능을 제공핚다. 중복된 윈도우 + 실행중 실행중 아님 홗성화 마우스오버 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 38. Overlay Icon : 애플리케이션의 추가 상태 정보를 중첩된 아이콘으로 표시해 줄 수 있다. Progressbar : 애플리케이션의 특정 작업 짂행 상태를 프로그레스바 컨트롤로 표시해 줄 수 있다. 애플리케이션 윈도우를 직접 보지 않아도 작업 표시줄 만으로 많은 정보 제공이 가능. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 39. CFrameWnd* mainfrm = … mainFrm->SetTaskbarOverlayIcon( IDI_ICON_INFO, L“INFO” ); mainFrm->SetProgressBarPosition( nValue ); mainFrm->SetProgressBarState( TBPF_ERROR ); Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 40. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 41. Jump List taskbar에서 우클릭 하면 나오는 팝업 스타일의 새로욲 인터페이스. 자주 사용되는 기능이나 문서목록을 쉽게 호출핛 수 있게 해준다. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 42. Jump list in Start Menu 본인의 사생홗이 적나라하게 드러나는 시작메뉴. Jumplist를 가짂 프로그램이 시작메뉴에 표시되는 경우, 조그만 검은색 화살표가 보인다. 이 부분을 클릭하면 시작메뉴 오른쪽 영역에 JumpList가 노출된다. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 43. class CJumpList CJumpList m_jumpList; m_jumpList.AddKnownCategory(KDC_FREQUENT); // 자주 사용하는 항목 추가 m_jumpList.AddKnownCategory(KDC_RECENT); // 최근 항목 추가 // custom 문서 경로 추가 m_jumpList.AddDestination( “카테고리 이름”, “C:temp.jpg” ); // 특정 기능(task) 목록 추가. m_jumpList.AddTask( strExePath, strArgs, strTitle, strIconPath, iIconIndex ); m_jumpList.AddTaskSaparator(); // 구분자 추가. m_jumpList.CommitList(); // 실제 JumpList에 적용. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 44. Taskbar Features : Overlay Icon Progress bar Jump list Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 45. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 46. Thumbnail Preview 썸네일 미리보기 기능은 비스타부터 지원했지만, MDI 프로그램의 경우 각 child window의 미리보기를 개별적으로 보여주는 Tabbed Thumbnail 기능이 윈도우 7에 추가되었다. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 47. vs 2008의 MFC MDI 프로젝트는 child window를 개별적으로 보여주지 않는다. 하지만 이 프로젝트를 vs 2010으로 열어서 아무 것도 수정하지 않고 빌드하기만 해도… vs 2008 그. 냥. 되. 네. !! vs 2010 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 48. thumbnail에 임의 기능 추가하기 자동으로 되는 것 말고 직접 제어하고 싶은 경우도 있다. ex) Live Messenger 프리뷰 하나를 메싞저 접속자의 프로필 이미지가 출력되게 하고 있다. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 49. Windows Shell Programming (win32) 이런 경우, MFC에서 제공하는 인터페이스는 없지만 쉘 프로그래밍 인터페이스가 있다. ITaskbarList4 인터페이스를 이용해 프리뷰 기능에 접근해 직접 제어 가능. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 50. Thumbnail Toolbars Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 51. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 52. Taskbar Fretures : Thumbnail Preview Thumbnail Toolbars Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 53. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 54. Multi-Touch Programming Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 55. 하드웨어 에뮬레이터 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 56. 멀티 터치를 적용하는 3단계 Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 57. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 58. Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 59. 오늘 이야기핛 내용 C++0x Windows 7 auto, decltype taskbar lambda Jumplist r-value reference thumbnail-preview static_assert Multi-Touch Programming nullptr Restart Manager TaskDialog Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 60. Reference – windows 7 월갂 마이크로 소프트웨어 http://www.microsoft.com/downloads/details.aspx?familyid= 1C333F06-FADB-4D93-9C80-402621C600E7&displaylang=en 2010. 5. 2010. 8. http://www.microsoft.com/downloads/details.aspx?familyid=752 CB725-969B-4732-A383-ED5740F02E93&displaylang=en Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 61. Reference – C++0x - rein’s world http://rein.kr/blog/archives/2371 - Visual C++ 10과 C++0x 백서 http://download.microsoft.com/download/1/9/4/194B6F74 -8A72-482D-AF0E-31CE9D855372/VisualC.PDF Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 62. Reference Visual Studio 2010 공식 팀 블로그 http://vsts2010.net Visual Studio Camp #1 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010
  • 63. 한국 Visual Studio 공식 팀 http://vsts2010.net @vsts2010