'CPP'에 해당되는 글 12

  1. 2009/08/07 잘 알려지지 않은 C++0x의 유용한 기능들 - 마지막 (2)
  2. 2009/07/23 잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째 (8)
  3. 2009/06/06 D&D-style map of C++ (2)
  4. 2009/05/15 Iterators Must Go! (in favor of ranges) (2)
  5. 2008/11/18 Where you can learn about C++0x
  6. 2008/09/29 Two useful links each about C++ and GameDev
  7. 2008/08/19 C++0x == C++09 ?
  8. 2008/08/06 C++ guru's 2 recent articles on concurrency
  9. 2008/07/29 Nice C++ GUI framework from Torjo
  10. 2008/05/14 Enum tips from "Power of Two Games" (1)

잘 알려지지 않은 C++0x의 유용한 기능들 - 마지막

잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째
잘 알려지지 않은 C++0x의 유용한 기능들 - 두번째



널포인터nullptr
정수 0 이 아닌 널 포인터 지칭 전용의 리터럴 nullptr가 생겼습니다.


날 문자열 리터럴raw string literals
문자열에서 특수문자를 나타내기 위해 백슬래쉬로 이스케잎 처리 해주는 것은, 정규표현식 등에서 매우 번거로운 작업이 됩니다. (정규표현식의 경우 캐릭터 클래스라는 것에서 별도 용도로 백슬래쉬를 쓰기 때문이죠.) 가령, 정규표현식에서 백슬래쉬로 분리되어 있는 두 단어를 나타내는 \w\\w를 문자열로 표현하려면 다음과 같이 해야 합니다.

날 문자열 리터럴을 사용하면 다음과 같이 표현 가능합니다.

이 때, 그럼 문자열 내에 ]" 표현이 있는 경우 어떻게 하는가 하는 의문이 들 수 있습니다. 이런 경우도 해결할 수 있도록, [ 앞과 ] 뒤에 쓰이는 구분자를 일치만 시켜주면 쌍따옴표와 대괄호 사이에 얼마든지 추가 구분자를 포함시킬 수 있도록 하였습니다. 다음과 같이 말이죠.


템플릿 별칭template alias
다음과 같이 일부 템플릿 인자만을 원하는 타입으로 지정하여 일반 템플릿처럼 작동하는 식별자를 만들 수 있습니다.

이 때 using 구문이 쓰이며, 이는 다음처럼 기존 typedef의 대용으로 쓰일 수도 있습니다.


초기화 구문 단일화uniform initialization syntax and semantics
C++은 타입과 초기화 문맥에 근거해 개체를 초기화할 수 있는 여러가지 방법을 제공해 왔습니다.

그리고 다음과 같은 혼란도 있었죠.

이러한 혼란을 없애고자 {}-초기화 목록을 일관되게 사용할 수 있도록 했습니다.



사용자정의 리터럴user-defined literals
C++은 여러 내장 타입들에 대한 리터럴을 제공합니다.

그러나 C++98에서는 사용자정의 타입에 대한 리터럴을 정의할 수 없었죠. 가령, 다음과 같은 것들 말입니다.

C++0x에서는 다음 문법으로 사용자정의 리터럴을 지원합니다.

컴파일시점 계산을 위해 constexpr을 사용함에 주목하세요. 이를 다음과 같이 활용할 수 있습니다.

이러한 사용자정의 리터럴을 위한 접미사는 보통 한두글자로 매우 짧을텐데요, 이럴 경우 쉽게 충돌이 발생할 수 있습니다. 그를 방지하려면 다음처럼 namespace를 사용하시면 됩니다.


이상으로 C++0x의 잘 알려지지 않은 기능들에 대한 연재를 마칩니다. 이상을 포함한 더 자세한 정보는 Bjarne Stroustrup 선생이 운영하는 다음 웹페이지에서 확인하실 수 있습니다.



* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.


크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2

잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째

최근 C++0x에서 concept 기능을 빼기로 최종 결정되면서 C++계가 나름 시끄러웠습니다. 그러면서 C++0x에 제가 알고 있던 큰 변화들 말고도 자잘하지만 유용한 변화가 꽤 많다는 것을 알게 되었습니다. 앞으로 두세 차례에 걸쳐 그런 기능들을 정리해보려 합니다.


enum class 열거형 클래스
기존 열거형의 다음과 같은 세가지 문제를 해결하고자 나온 놈입니다.
  • 기존 열거형은 암묵적으로 int로 변환이 되어, 그런 행동을 원치 않을 경우 문제가 된다.
  • 기존 열거형은 그를 포함하는 스코프로 각 토큰들을 노출시켜, 이름 충돌을 발생시킬 수 있다.
  • 열거형의 기반 타입을 지정할 수 없어, 혼란과 호환성 문제가 발생하고 전방 선언을 할 수 없다.



constant expressions 상수표현식
  • 더 일반적 상수표현식 제공
  • 사용자 정의 타입에 대한 상수표현 허용
  • 컴파일 시점에 초기화가 이루어지도록 보장하는 도구 제공


위에서 세번째 case문 같은 것이 가능해집니다.

 
당연히 컴파일 시점에 계산할 수 있는 것constexpr로 지정 가능합니다.

 
위와 같은 활용도 가능

defaulted and deleted functions 함수 자동생성 버전 사용 및 사용불가 지정
기존에는 복사를 방지하려고 복사 생성자와 대입 연산자를 private에 둔다던가 하는 방법을 썼었죠. 이제 다음과 같이 명시적 지정이 가능합니다.

또한 다음과 같이 컴파일러 자동 생성 버전을 사용함을 명시적으로 나타낼 수도 있습니다.

delegating constructors 생성자 위임

C++98에서는 여러 생성자가 같은 작업을 하도록 하려면 중복 코드를 짜거나 다음과 같이 "init()" 함수 같은 것을 만들어야 했습니다.

C++0x에서는 다음과 같이 한 생성자에서 다른 생성자에 작업을 위임할 수 있습니다.

이번 회는 여기까지입니다. C++ 사용하면서 불편하거나 번거로웠던 사항들을 많이 해결하고 있는 느낌입니다.

* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.  


크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 8

D&D-style map of C++

복잡한 C++의 세계를 다 표현하기에는 명백히 부족하지만...

출처: Алёна C++

그래도 재미있네요. ^^
크리에이티브 커먼즈 라이선스
Creative Commons License

'Game Development' 카테고리의 다른 글

크라이텍 깜짝 선물  (2) 2009/06/16
n번째 피보나치 수 구하는 프로그램  (0) 2009/06/09
D&D-style map of C++  (2) 2009/06/06
Double-checked locking 이디엄의 함정  (2) 2009/06/03
Iterators Must Go! (in favor of ranges)  (2) 2009/05/15
std::stack에 관한 소고  (0) 2009/05/12
Trackback 0 Comment 2

Iterators Must Go! (in favor of ranges)

부스트 라이브러리 관련 컨퍼런스가 있더군요. BoostCon 이라는 이름으로 얼마전 열렸습니다. 거기서 C++ 관련 대가 중 한명인 Andrei Alexandrescu가 키노트를 발표하였습니다. 제목은 "Iterators Must Go"였습니다.


결론은 말하자면 iterator는 여러가지 단점이 있으니 대신 range라는 개념을 쓰자였습니다. Range의 개념은 사실 한참 전에 나온 것으로 부스트를 비롯하여 여러 라이브러리에 이미 구현되어 있습니다. 안드레이는 여기서 한발 더 나아가 아예 range로 iterator를 대체할 것을 주장합니다. 안드레이의 결론은 다음과 같습니다.
  • Range가 더 잘 추상화된 개념이다
  • 안정성도 더 높다
  • 쉽게 조합하여 확장할 수 있다
  • 단순히 기존 iterator 버전의 STL 알고리즘들을 range로 포팅하는 수준을 넘어 한단계 업그레이드시킬 수 있다
대가답게 슬라이드 자료도 명료하고 흥미진진합니다. C++에 관심이 많은 분들은 꼭 읽어보십시오. 이곳에도 range 관련 글이 있으니 더불어 읽으시면 좋을듯.

여하튼 C++0x를 중심으로 오랜 정체 끝에 C++도 많은 변화가 기대되는 시기입니다. ^^

p.s. 이러한 range를 비롯하여 STL 라이브러리 제공하는 언어가 하나 더 있으니 D 언어입니다. 저도 한때 관심을 가지고 공부했었는데... 나름 흥미로웠습니다. 게임 개발용으로도 적절한 언어로 보였거든요. 어쨌든 슬라이드나 안드레이의 홈페이지를 보셨다면 아시겠지만 조만간 그가 저술한 책, "The D Programming Language"가 나옵니다. 주류 언어로 자리잡기에는 여전히 갈길이 멀어보이지만 그래도 기대되는 행보입니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2

Where you can learn about C++0x



옛날 것도 좀 있지만 그래도 자료가 꽤 많군요. 기대됩니다.


Technorati Tags: , ,
크리에이티브 커먼즈 라이선스
Creative Commons License

'Game Development' 카테고리의 다른 글

Multicore Programming Lectures in MIT  (2) 2008/11/26
Ed Catmull: Keep Your Crises Small  (0) 2008/11/20
Where you can learn about C++0x  (0) 2008/11/18
Visual C++ 10: 10 is the new 6  (2) 2008/11/18
A neat web-based Scrum solution  (0) 2008/10/28
Good presentations from Agile2008  (0) 2008/10/09
Trackback 0 Comment 0

Two useful links each about C++ and GameDev

More C++ Idioms :  C++ 이디엄 총정리



GameDevKicks.com : 게임 개발 관련 링크를 전문으로 하는 메타 사이트




Technorati Tags: , ,
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0

C++0x == C++09 ?

사용자 삽입 이미지

Followings are nice articles about C++0x, the next standard of C++ programming language from DevX.


C++ geeks' must-reads!
크리에이티브 커먼즈 라이선스
Creative Commons License

'Game Development' 카테고리의 다른 글

크라이텍에서의 첫 주  (7) 2008/09/06
Code Drill #2  (0) 2008/08/21
C++0x == C++09 ?  (0) 2008/08/19
How to Fail with Agile  (0) 2008/08/18
the Ten Commandments of Debugging  (0) 2008/08/14
Code Drill #1  (0) 2008/08/12
Trackback 0 Comment 0

C++ guru's 2 recent articles on concurrency

Both DDJ articles are by Herb Sutter.
크리에이티브 커먼즈 라이선스
Creative Commons License

'Game Development' 카테고리의 다른 글

the Ten Commandments of Debugging  (0) 2008/08/14
Code Drill #1  (0) 2008/08/12
C++ guru's 2 recent articles on concurrency  (0) 2008/08/06
nvidia GPU-BBQ 2008  (0) 2008/08/06
'touch' command-line utility in Python  (2) 2008/08/01
초생산적인 팀  (0) 2008/07/31
Trackback 0 Comment 0

Nice C++ GUI framework from Torjo

It's called eGUI++ from John Torjo, the creator of Win32 GUI generics.

There is a MSDN article about it, too.

I'll try it in my project sooner or later...
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0

Enum tips from "Power of Two Games"

사용자 삽입 이미지

In English...(show)



오랜만에 Power of Two Games 블로그에 들어가보았습니다. 새 글들이  올라왔더군요. 거기서 찾은 유용한 팁입니다.

현재 프로젝트에서  우리는 다음과 같은  명명 규칙으로 C++ 열거형을 표기합니다.

     enum eSomeEnum
    {
        ESE_RED,
        ESE_GREEN,
        ESE_BLUE
    };

이처럼  열거형 타입명의 약어를 접두어로 쓰는  방식은 의외로 접두어가 중복되는 경우도 많고  알아보기도 어렵더군요... 그래서 다음 프로젝트에서는 다른 방법을 쓰리라 생각하던 차에 이 글을 접하게 된 것이죠.

결론은 다음과 같이 쓰자는 것입니다.
namespace GameFlowType
{
enum Enum
{
Invalid,
Run,
Exit,
Restart,
Restore,
};
}

상당히 깔끔한 방식이라 생각합니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 2 Comment 1

top