DRY Macro Trick

Game Development 2008/05/09 18:05 |

사용자 삽입 이미지

In English...(show)


C++ 에서 매크로를 이용해 반복 작업을 최소화 하는 경우가 많습니다. 메시지 등록 작업이나 reflection 시스템에 클래스 등록 시 등이 그런 경우이지요. 등록 작업이 코드의 한 부분으로 제한되기 어려운 경우, 어쩔 수 없이 중복되는 정보를 여러 번 입력해야 하는 경우가 있습니다. 그러면 DRY(Don't Repeat Yourself) 원칙에 위반되면서, 여러 불일치 문제가 생길 수 있습니다.

Visual C++ 팀 블로그에서 확인한 다음의 팁이 그러한 경우에 매우 유용하더군요. 다음과 같이 열거형과 그에 대응하는 설명 문자열이 필요한 경우입니다.

enum Animal { dog, cat, fish, bird };

wchar_t* AnimalDiscription[] = { L"dog", L"cat", L"fish", L"bird" };

animal.inc 파일의 내용이 다음고 같다고 하면,

MYENUM(dog)

MYENUM(cat)

MYENUM(fish)

MYENUM(bird)

다음처럼 코드를 짜는 겁니다.

enum Animal {

#define MYENUM(e) _##e,

#include "animal.inc"

#undef MYENUM

};

 

wchar_t* AnimalDescription[] = {

#define MYENUM(e) L"_" L#e,

#include "animal.inc"

#undef MYENUM

};

 

정말 간단하면서도 절묘한 아이디어인듯...

이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
RSS This posting was useful? Then subscribe to "gl3d.net"!
RSS 글이 유익하셨다면 gl3d.net을 구독하세요.

Trackback Address :: http://gl3d.net/trackback/56

댓글을 달아 주세요

  1. BlogIcon 차재일 2008/06/04 18:30 Address Modify/Delete Reply

    윗 글만 봐서 이해가 안됐는데 팀 블로그를 보니 이해가 가더라고요... ㅡ,.ㅡ;;

    근데 리플에서도 있듯이 유지보수 차원이나 가독성이 많이 떨어질거 같아요... 좀 더 나이스한 방법이... 제 머리로는... ㅎㅎ

    그리고, 가장 중요한 VS.NET IDE에선 저 놈을 F12로 찾아주지 않는다는거... orz...