C 스타일 캐스트는 C++에서 악의적 인 것으로 알려져 있습니다. 따라서 프로그래머가 의도 한 변환 클래스 만 허용 할 수 있도록 더 많은 맞춤 제작을 제공하기 위해 const_cast<>
, static_cast<>
및 dynamic_cast<>
으로 대체됩니다. 여태까지는 그런대로 잘됐다.상영 전용 캐스트
그러나 명시 적 업 캐스트를 수행하는 기본 구문이없는 것으로 보입니다. A는을 허용하지 않고 Base& baseRef = derived
명시 적으로 에서 암시 적 변환을 수행하는 것을 의미합니다.
아주 작지만 (대부분의 경우 암시 적 변환이 잘 작동 함) 나는 알고 있지만 사용자 코드에 이러한 캐스트를 구현하는 데 사용할 수있는 기술이 무엇인지 궁금합니다. 나는 좋은 너무 복잡한 것 같습니다 그러나
template<class T>
class upcast {
public:
template<class U, typename = typename std::enable_if<std::is_convertible<U, T>::value>::type>
upcast(U value) : value(value) {}
operator T() { return value; }
private:
T value;
};
의 라인을 따라 뭔가에 대해 생각했다, 나는 템플릿 메타 프로그래밍의 전문가가 아니에요 이후, 나는 다른이 있는지 묻고 싶다/더 나은/더 간단한 접근법.
난 당신이 여기에 달성하려는 모르겠어요. static_cast를 사용하여 업 캐스팅 할 수 있습니다. –
'reference '는'null'이 아니기 때문에'reference'를'dynamic_cast' 또는 다른 캐스트로 업 캐스팅 할 수 없습니다. 따라서 업 캐스팅이 유효한지 알 수있는 방법이 없습니다. – LibertyPaul
@LibertyPaul 무슨 뜻인지 잘 모르겠습니다. 'dynamic_cast'를 통한 업 캐스팅은 항상 성공하고 잘못된 다운 캐스트는 참조를 사용할 때'std :: bad_cast'를 던집니다. – TartanLlama