integral_constant라는 Helper 클래스에 대해 궁금합니다.
글쓴이: dltkddyd / 작성시간: 화, 2013/11/26 - 5:17오후
integral_constant라는 클래스안에 타입인수로 비타입인수를 캐스팅하는 연산자가 정의돼 있습니다. 이것이 뭘 하는 것인가 궁금해서 Trial이라는 클래스로 동일한 연산자를 정의하였더니, 내부의 값을 캐스팅해서 적절하게 불러오기 위한 기능을 하는 것이던데요. 그런데 이와는 다르게, integral_constant 클래스에서의 타입캐스팅은 내부의 값을 적절하게 불러오지 못합니다. 아래 예시 코드가 있습니다.
template class Trial { public: static const int value=v; operator int() const { return v; } };
int main() {
Trial ttmp;
cout<<"ttmp.value is "<<(int)ttmp<
integral_constant obj3;
cout<
cout<<(int)obj3<
return 0;
}
Forums:


글이 잘려서 다시 올립니다.
integral_constant라는 클래스안에 타입인수로 비타입인수를 캐스팅하는 연산자가 정의돼 있습니다. 이것이 뭘 하는 것인가 궁금해서 Trial이라는 클래스로 동일한 연산자를 정의하였더니, 내부의 값을 캐스팅해서 적절하게 불러오기 위한 기능을 하는 것이던데요. 그런데 이와는 다르게, integral_constant 클래스에서의 타입캐스팅은 내부의 값을 적절하게 불러오지 못합니다. 아래 예시 코드가 있습니다.
template<class ctarg, ctarg v> class Trial { public: static const int value=v; operator int() const { return v; } }; int main() { Trial<int, 50> ttmp; cout<<"ttmp.value is "<<(int)ttmp<<endl;//여기서는 50이라는 값이 적절하게 출력됩니다. integral_constant<int,75> obj3; cout<<obj3.value<<endl; cout<<(int)obj3<<endl;//그런데 여기서는 의도대로 캐스팅이 되지 않습니다. 컴파일시 무효한 타입 캐스팅이라는 오류 메시지가 뜹니다. return 0; }integral_constant의 내부 정의는 다음과 같던데요.
template <class T, T v> struct integral_constant { static constexpr T value = v; typedef T value_type; typedef integral_constant<T,v> type; constexpr operator T() { return v; } };여기서
constexpr operator T(){return v;}
가 캐스팅을 제대로 하지 못하는 이유는 뭔가요? 그런데 <를 계속 <, >를 >로 출력하네요. <code>~</code>로 감쌌는데도요.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기