integral_constant에서 타입캐스팅에 대해 다시 질문올립니다.
글쓴이: dltkddyd / 작성시간: 수, 2013/11/27 - 3:55오후
integral_constant라는 클래스에
constexpr operator value_type() { return v; }
라는 함수가 있던데요. 이 멤버함수 객체 자신을 캐스팅하는 연산자 아닌가요? 그러니까
integral_constant obj;
라고 했다면
int tmp=(int)obj;
와 같이 정수형 변수에 타입을 담을 수 있을 것이라 생각했는데, 안되네요. 작동되지도 않는 저 따위 함수는 왜 필요한 거죠?
Forums:
일단 잘되는것 같네요.
C++11로 넘어오면서 저부분이 확장이 됐네요. 그걸 모르고 엉뚱한 답변을 달았다가 수정을 하게 됐네요. ^^
템플릿은 이미 STL에 구현이 돼있는 내용이지만 라인별로 테스트를 하기 위해 그냥 복사해서 붙여 넣었습니다.
C++11을 지원하는 컴파일러에서 잘 동작을 합니다. 다만 본문에서 "타입"을 담는다 하셨는데 저게 리턴하는건 그냥 값 그 자체지 타입을 리턴하지는 않습니다. 타입은 value_type을 쓰면 사용할 수 있긴 합니다. 문자나 숫자로 바꾸려면 typeid를 먹여야 하지만..
C++11로 하셨는데도 문제가 있다면 소스와 에러를 올려줘보시면 좋겠습니다.
--
헤더에 해당 연산자가 정의돼지 않았었네요.
탐색기로 검색해서 헤더 찾아보았더니
operator value_type() {
return v;
}
가 정의돼 있지 않아네요. integral_constant에 해당 연산자를 삽입해서 문제를 해결했습니다. 답변 감사드립니다. 아, 그런데 constexpr 이라는 식별자는 const라는 것의 타입 재정의인가요? 제 헤더에는 이게 없는 것 같던데요. 없으면 어떻게 이것을 만들어야 하나요?
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
constexpr는..
C++에서 새로 정의된 키워드로, 계산식이 컴파일타임에 계산완료될 수 있음을 의미합니다. 이게 컴파일이 되지 않는다면 C++11 환경이 아니거나 해당 옵션을 켜지 않은 걸로 생각됩니다. 그냥 const와는 다릅니다.
상황 보아하니 현재 쓰시는 STL도 C++11용으로 새로 업데이트된 것이 아닌듯 합니다. 간단히, C++11환경으로 다 맞추시면 원하는 것이 다 그냥 될 것으로 보입니다.
--
댓글 달기