Boost & Tips 2010-05-11 최성기
Boost & Tips
2010-05-11
최성기
agenda
• boost::assign
• boost::timer
• boost::format
• enum을 쓰기 편하게 만들자
• 서버 다운시 재실행 스크립트
• 문법 변경사항 ( vc++ 8.0 )
assign to std::vector
boost::assign
• since boost 1.32
• operator, / operator()를 활용
• 컨테이너에 값을 쉽게 넣어보자
• 편리한 인터페이스를 만드는 방법
std::map에 원소를 넣는 기존 방법
assign to std::map
queue, list, stack… 다양한 아이디어
http://www.boost.org/doc/libs/1_43_0/libs/assign/doc/index.html
클래스 만들 때, interface design에 참고
GetTickCount()
boost::format
printf(…)를 레벨업 시키자.
어서 오시오, %s.
그대를 기다리고 있었소.
우린 %s 만렙이 필요하오.
%s, 하루빨리 만렙을 찍으시오.
%s가 없으니 지금 다른 직업 다 있
고 %s만 없소.
지금 레벨이 %d가 뭡니까…blah..
• strNickname.c_str() / 뉘집딸래미
• strJobName.c_str() / 사냥꾼
• strNickname.c_str() / 뉘집딸래미
• strNickname.c_str() / 뉘집딸래미
• strJobName.c_str() / 사냥꾼
• nCharLevel / 77
해결방법 1 - 자체제작
기획자분들 잘 들으세요.
($nick)은 닉네임,
($job)는 직업이름,
($lv)는 캐릭터레벨입니다.
자꾸 물어보지 마시고 책상에 적
어서 붙여두세요.
어서 오시오, ($nick).
그대를 기다리고 있었소.
우린 ($job) 만렙이 필요하오.
($nick), 하루빨리 만렙을 찍으시오.
($nick)가 없으니 지금 다른 직업
다 있고 ($job) 만 없소.
지금 레벨이 ($lv) 가 뭡니까
…blah..
해결방법 1 - 자체제작
boost::replace_all( strDesc, “($nick)”, strNick.c_str() );
boost::replace_all( strDesc, “($job)”, strJob.c_str() );
boost::replace_all( strDesc, “($lv)”, nCharLv ); // error
while( token = _strtok( szCopy ) )
{
if( strcmp( token, “($nick)” ) == 0 )
{
// … 어우… 귀찮음…
}
else …
해결방법 2 – CString::FormatMessage
CString::Format
CString::FormatV
CString::FormatMessage
%1!d! 따위를 기획자에게 가르치느니,
직접 만드는 게 정신건강에 좋다.
해결방법 3 – boost::format
어서 오시오, %1%.
그대를 기다리고 있었소.
우린 %2% 만렙이 필요하오.
%1%, 하루빨리 만렙을 찍으시오.
%1%가 없으니 지금 다른 직업 다
있고 %2%만 없소.
지금 레벨이 %3%가 뭡니까
…blah..
• strNickname / 뉘집딸래미
• strJobName / 사냥꾼
• nCharLevel / 77
boost::format, excel, lua
enum + macro
MajorCode.h
#define _ENUM( id, desc ) id,
enum SomeType
{
#include “SomeType.enum.h”
}
SomeType.enum.h
_ENUM( ST_ABC, 철수 )
_ENUM( ST_DEF, 영희 )
_ENUM( ST_GHI, 바둑이 )
공통 에러코드 처리
서버 다운 -> 업데이트 -> 재실행
function-try block in vc++ 7.0
for each in vc++ 8.0 (비표준)
keyword __super in vc++ 8.0 (비표준)
__VA_ARGS__ in vc++ 8.0
오늘 한 이야기, 앞으로 할 이야기• boost:assign
• boost::format
• boost::timer
• boost:thread
• boost::smart_ptr
• boost::bind
• functor와 boost:rambda, C++0x rambda
• std::ostream과 호환되는 class data dump system
• enum 정의를 문자열로 만드는 괜찮은 방법
• 서버 다운 재실행 스크립트
• 디버깅 환경 구축 : dump analysis system, bugtrap
• 디버깅 환경 구축 : symbol server setting
• Daily build & Release Tag(version) 관리
• RTTI code – from Gamebryo
• 메시지 드리븐 아키텍쳐 만들기 : state pattern, message pattern
• 새로 추가됐지만, 잘 모르는 문법들
• … and more