C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[630] c++ enum 에서 string 출력...
둘리 [dooly386] 21987 읽음    2007-02-17 04:55
define 문을 응용하여 만들어 봤습니다..

#define begin_enum(name) enum name {
#define enum_elem(elem) elem
#define end_enum(name) };

begin_enum(MyEnum)
    enum_elem(ea),
    enum_elem(eb)
end_enum(MyEnum)

#undef begin_enum
#undef enum_elem
#undef end_enum

#define begin_enum(name) char * gs_##name_enum_name[] = {
#define enum_elem(elem) #elem
#define end_enum(name) }; char * get_string_##name(enum name idx) {return gs_##name_enum_name[idx];}

begin_enum(MyEnum)
    enum_elem(ea),
    enum_elem(eb)
end_enum(MyEnum)

------------------------------------------------------------------------
사용할때는...

MyEnum aaa = ea;
AnsiString senum = get_string_MyEnum(aaa);


여기서 senum = "aaa" 가 나옵니다.
Header file과 #ifdef 를 적절히 이용하면
begin_enum(MyEnum)
    enum_elem(ea),
    enum_elem(eb)
end_enum(MyEnum)

이부분을 한번만 기술하여도 됩니다.

c++ 에서 enum 을 string으로 뽑기가 힘들어서(불가능) 생각해 봤습니다.
좀더 간략한 구문이나 C# 같은 구조가 될수 있도록 연구 중입니다.

수고들 하세요..
김시환 [godson2]   2007-02-22 09:10 X
잘은 모르겠는데 저 같은 경우 이럴때 Mapping 기법을 사용하는데요..

typedef enum __Error {AAA, BBB, CCC} ERROR
const AnsiString asError[3] = {"AAA", "BBB", "CCC"} ;

ERROR Err_name ;

Err_name = AAA ;

ErrorName->Caption = asError[Err_name] ;


강재호.만해 [greenuri]   2007-03-06 11:51 X
저는 그냥 귀찮아서 map 씁니다. ^^/
#include <map>
typedef enum __Error { AAA, BBB, CCC } Error;
map<__Error, AnsiString> ErrorMap;
__Error Err_name;
ErrorMap[AAA] = "AAA";
ErrorMap[BBB] = "BBB";
ErrorMap[CCC] = "CCC";
ErrorName->Caption = ErrorMap[Err_name];

이렇게 쓰는데요 map을 쓰면 장점은 Err_name이 범위를 벗어난 값이 더라도
Out of Bound 에러가 안뜹니다. ㅋㅋ~
범위를 벗어난값은 ""이 되죠, AnsiString의 생성자에서 가지는 디폴트값이 출력 됩니다.

단~ 메모리를 좀 잡아 먹습니다. 쿨럭~
map이 RB트리로 값을 유지 하기 때문에 4개의 경우 실제 4개만 있는게 아니라
내부적으로 더 많은 정보를 유지 하고 있어서 메모리를 좀 잡아 먹습니다.

+ -

관련 글 리스트
630 c++ enum 에서 string 출력... 둘리 21987 2007/02/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.