프로그래밍/C/C++2013.08.19 17:02

cocos2dx 3.0.0 이 kick start 되었습니다.


기존 2.x.x에서 3.x.x로 바뀌었단 얘기는 많은것이 바뀌었단 얘기죠.


가장 큰 변화점은 C++11 을 정식으로 지원한단 얘깁니다.


C++10 또는 C++0x 은 기존 C++의 불편한 점을 개선하고 최근 트렌드 (java, phython등) 를 따라가려고 노력합니다.


앞으로 이 부분에 대해 간략하게 소개할까 합니다.


따..딱히 할일이 없어서 그러는건 아니라능!


cocos2dx 3.0.0 (이하 cocos3.0) 에서는 다음과 같은 재료를 필요로합니다.


- Xcode 4.6 (for iOS or Mac)

- gcc 4.7 for Linux or Android. For Android ndk-r8e or newer is required.


업데이트 해주세요 :)

참고로 ios7에서 앱을 만들고 업로드하려면 xcode5 가 필요합니다. 그리고 xcode5 는 마운틴라이언부터 지원하고요. -_-;;;


cocos3.0 에서 c++11 을 지원하는 부분은 크게 4가지입니다.


- std::function, including lambda objects for callbacks

- strongly typed enums, for most of the cocos2d-x enums and constants

- std::thread for threading

- override context keyword, for overriden methods


오늘은 std::function, lambda object 에 대해 설명하겠습니다.


위에서도 말했듯이 c++0x부터 최신 트렌드를 따라가기 위한 많은 노력이 있었는데


예를들어 java에서


{

    this.callback(new callback(){ Log.d(TAG, "CALLBACK!"); });

}


같은 코드를 자주 쓰셨을겁니다.


함수안에서 함수의 내용을 선언해서 사용하는 부분인데 c++에서는 해당 기능을 지원해주지 않아서 쓸데없이 header가 길어졌죠.


c++0x에서는 이걸 이렇게 지원해줍니다.


{

    this->callback([]{ Log.d(TAG, "CALLBACK!"); });

}


만세! 이제 .h 는 좀 더 깔끔해질겁니다!


기본적인 사용법은 [introducer]->return type(parameter){statement} 입니다.


parameter, statement 야 다들 아실테고 introducer 를 설명드리자면


이 람다에 외부 변수들을 어떻게 연결시켜줄지 선언하는 부분입니다.


1) 아무것도 넣지 않으면 외부 변수들을 쓰지 않겠다.


2) [=] 는 외부의 변수를 값(const)으로 사용하겠다


3) [&] 는 외부의 변수를 참조(*)해서 사용하겠다.


4) [this] 는 외부와 직접적으로 연결하겠다.


introducer는 좀 더 복잡하게 사용 가능합니다.


만약 


{

    int a, b;

    [=, &a](){ };

}


라면 외부의 변수의 값을 전부 가져오되, a만 참조하겠다. 라는 뜻입니다.


[&, b](){ }; 처럼 쓸 수도 있습니다.


return type 은 해당 람다가 값을 리턴할때 그 형을 명시해줄 수 있습니다.


(어떠한 형인지 확정할 수 없을때 java 에서 Object 를 쓰듯이, objective-c 에서 id 를 쓰듯이, c++0x에선 auto 를 쓸 수 있습니다.)


또한 람다 자체를 객체로서 보관할 수 도 있습니다.


function<void (int)> func = [](int n) { cout << n * n * n << " "; };


다음에는 threading 에 대해 알아보겠습니다.


참고자료 : http://scor7910.tistory.com/55

Posted by Yria

댓글을 달아 주세요