Visual Studio 2010 공식 팀 블로그 @vsts2010

Posted by 흥배


비관리 코드의 열거형

 

비관리 코드에서 열거형을 정의할 때는 다음과 같습니다.

 

enum WEAPON_TYPE

{

GUN = 1,

SWORD = 2,

BOW = 3

};

 


열거형은 정수형으로 int 형에 대입할 수 있습니다.

int nUsedWeapon = GUN;

 

그런데 저는 위의 방식으로 사용할 때 ‘GUN’이라고 사용하기 보다는 ‘GUN’이 어떤 열거형에 속하는지 표시할 수 있도록 좀 더 다른 방식으로 사용하고 있습니다.

 

struct WEAPON

{

enum TYPE

{

GUN = 1,

SWORD = 2,

BOW = 3

};

};

 

int nUsedWeapon = WEAPON::GUN;

 

이렇게 저는 열거형을 조금 이상한 방법으로 사용하고 있는데 C++/CLI에서는 그럴 필요가 없어졌습니다. C++/CLI는 제가 딱 원하는 방식을 정식으로 지원하고 있습니다.

 


 

C++/CLI의 열거형

 

enum class WEAPON

{

   GUN = 1,

SWORD = 2,

BOW = 3

};

 

int nUsedWeapon = static_cast<int>(WEAPON::GUN);

 

C++/CLI의 열거형은 비관리코드와 비교해서 다른 점은 위에서 알 수 있듯이 암묵적으로 int 형에 대입할 수 없습니다. 왜냐하면 열거형은 정수형이 아니고 object이기 때문입니다.

그래서 캐스팅을 해야 합니다.

 

그리고 C++/CLI의 열거형은 정수형을 명시적으로 정할 수 있습니다.

enum class WEAPON : short

{

   GUN = 1,

SWORD = 2,

BOW = 3

};

 


< 추가 > - 2010. 12. 10

VC++10에서 열거형의 타입을 바로 위의 코드와 같이 명시적으로 지정해도 사용할 수가 없습니다.

enum을 사용할 때 타입 캐스팅을 해야합니다. 왜 이런지 저도 자세한 이유는 모르겠습니다.

C++/CLI에서는 enum 보다는 literal을 사용하는 것이 더 좋을 것 같다고 생각합니다.


public ref class WEAPON
{
public:
        literal short GUN = 1;
        literal short SWORD = 2;

        literal short BOW = 3;

};




참고

http://msdn.microsoft.com/ko-kr/library/ms235243.aspx

 

 

 



저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'C++/CLI' 카테고리의 다른 글

[Step. 13] parameter array  (1) 2010/09/10
[Step. 12] for each  (1) 2010/09/03
[Step. 11] 열거형( enum )  (2) 2010/08/27
[Step. 10] 이벤트 ( event )  (0) 2010/08/20
[Step. 09] 델리게이트 (delegate)  (2) 2010/08/12
[Step. 08] 프로퍼티 ( property )  (8) 2010/08/06

댓글을 달아 주세요

  1. 비관리코드에서 NameSpace를 이용하면 struct를 쓴 것보다 더 유용하게 쓸 수 있지 않을까 싶습니다.

    namespace WEAPON
    {
    enum TYPE
    {
    GUN = 1,
    SWORD = 2,
    BOW = 3
    };
    };

    int nUsedWeapon = WEAPON::GUN;
    using namespace WEAPON;
    int nUsableWeapon = SWORD;

  2. enum을 사용할 때 타입 캐스팅을 해야 합니다. 왜 이런지 저도 자세한 이유는 모르겠습니다.

    short nUsedWeapon = (short)WEAPON::GUN;
    이렇게 사용하는 게 맞나요?