버그 해결을 위한 모든 질문을 던져
0 votes
345 views
c++에서 자주 쓰이는

#define SKILL_ID long

형태처럼 일반 타입명이지만 혼동 방지를 위해 이름을 변경해서 사용했는데

using 명령어는 매 네임 스페이스 파일 마다 추가해줘야 해서 불편하네요

전역으로 사용 가능하게 할 방법이 없을까요?

지금 생각은

struct SKILL_ID

{

long ID;

}

 

형태로 전역에서 헷갈리지 않게 하는건데 이것도 이것 나름대로 불편할거 같구...

뭔가 좋은 방식이 있으면 알려주세요
asked (7 point) , 345 views
질문과는 관계 없습니다만 보통 위와같은 타입 명시의 경우는 typedef를 이용하지 않나요? #define으로 타입을 변환하는 경우는 저한테 좀 생소하네요. ㅎ

1 답변

+1 vote

 

public struct Skill_ID
{
    long value;

    public static implicit operator Skill_ID(long v)
    {
        return new Skill_ID() { value = v };
    }

    public static implicit operator long(Skill_ID v)
    {
        return v.value;
    }
}

 

자세한 건 연산자 오버로딩을 찾아보시면 될 것 같습니다.

answered (99 point)

[MSDN] 변환 연산자 사용(C# 프로그래밍 가이드)

찾으라 하셔서 찾아놨습니다.. 나중에 볼려고.. ㅋㅋ

그나저나 이렇게 쓰면 성능 문제는 없는걸까요?

그리고 디버깅할떄 값을 바로 보지 못하고 한번 더 열어야하는 불편함(?)이 있는거 같군요..

 

 

 

디버깅할 때 값을 바로 보지 못하는 문제는 ToString을 재정의하시면 됩니다.
당연히 그냥 long을 쓸 때보다 함수 호출 및 구조체 생성의 오버헤드가 있습니다만

둘 다 찾아보시면 알겠지만 극한으로 성능 튜닝을 하는게 아니면 무시하셔도 되는 수준입니다.

디버깅 상황에서 저렇게 보는 거라 -_-;

저것도 ToString 재정의 하면 되는건가요?

 

네 ToString을 return value; 로 오버라이딩 하시면 {3} 이런 식으로 보이실 거에요

오오 말씀 하신데로 오버라이딩 하니 보이는군요!!! 정보 감사합니다!!!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

110 질문
204 answers
219 댓글
230 users