나는 CTor가 UCHAR
을 인수로 취하는 클래스 CMyClass
을 만들었습니다. 이 인수는 다양한 열거 형의 값을 가질 수 있습니다 (모두 UCHAR
에 맞도록 보장됨). 해당 값을 UCHAR
으로 변환해야합니다. 라이브러리 함수가 해당 유형의 매개 변수를 요구하기 때문입니다.열거 형 값을 정수형으로 변환 할 때 컴파일러 경고를 피하는 방법은 무엇입니까?
std::vector<CMyClass> myObjects;
boost::assign::push_back(myObjects)
(MemberOfSomeEnum)
(MemberOfSomeEnum);
std::vector<CMyClass> myOtherObjects;
boost::assign::push_back(myObjects)
(MemberOfAnotherEnum)
(MemberOfAnotherEnum);
위의 코드는 두 열거 멤버의 각과 CMessage
의 ctor를 호출 한 다음에 그들을두고 :
나는 그 메시지 객체를 많이 작성하고 내가 사용하는 노력 boost::assign
를 입력 저장해야 명부. 내 문제는 VC++ 9에서이 코드가 경고 C4244 (열거 형에서 UCHAR로 변환 중 데이터가 손실 될 수 있음)가 발생한다는 것입니다.
나의 현재 솔루션은 각 열거 유형에 대한 변환 함수 만드는 것입니다 :
static UCHAR ToUchar(const SomeEnum eType)
{
return static_cast<UCHAR>(eType);
}
static UCHAR ToUchar(const AnotherEnum eType)
{
return static_cast<UCHAR>(eType);
}
을 그리고 위의 코드는 다음과 같습니다
std::vector<CMyClass> myObjects;
boost::assign::push_back(myObjects)
(ToUchar(MemberOfSomeEnum))
(ToUchar(MemberOfSomeEnum));
std::vector<CMyClass> myOtherObjects;
boost::assign::push_back(myObjects)
(ToUchar(MemberOfAnotherEnum))
(ToUchar(MemberOfAnotherEnum));
이 내가 생각할 수있는 가장 깨끗한 방법입니다 지금까지.
더 좋은 방법이 있습니까?
부스트가 좋을 수도 있습니다.
나는 pragma 문으로 경고를 비활성화하고 enum을 수정할 수 없습니다.
이렇게하면 읽을 때마다 "ToUchar (SomeEnumMember)"을 쓸 필요가 있습니다. 저것은 나가 "청결한"에 의미 한 무슨이다. –
foraidt
아니요, 템플릿 인수가 추론됩니다. ToUchar (SomeEnumMember) – fizzer
죄송합니다. 나는 코멘트를 쓰기 전에 그것을 시험해 보았 어야만했다 : -/ – foraidt