템플릿 typedefs-해결 방법은 무엇입니까?
-
09-06-2019 - |
문제
C ++ 0x에는 템플릿 별칭 (템플릿 typedef라고도 함)이 있습니다. 여기 를 참조하세요.C ++의 현재 사양은 그렇지 않습니다.
해결 방법으로 무엇을 사용하고 싶으십니까?컨테이너 개체 또는 매크로? 그만한 가치가 있다고 생각하십니까?
해결책
해결 방법으로 무엇을 사용하고 싶으십니까?컨테이너 개체 또는 매크로?그만한 가치가 있다고 생각하십니까?
표준적인 방법은 다음과 같은 메타 함수를 사용하는 것입니다. 라코 디스
이것은 STL (allocator::rebind<U>
)과 Boost를 포함한 많은 라이브러리에서도 사용됩니다. 생물 정보 라이브러리 에서 광범위하게 사용합니다.
부풀어졌지만 99 %의 경우 최고의 대안입니다.여기에서 매크로를 사용하는 것은 많은 단점이 있습니다.
(편집 : Daniel이 그의 의견에서 지적한대로 Boost / STL 규칙을 반영하도록 코드를 수정했습니다.)
다른 팁
가상 소멸자가없는 클래스에서 상속해서는 안됩니다.파생 클래스의 소멸자가 호출되어야 할 때 호출되지 않는 것과 관련이 있으며 할당되지 않은 메모리로 끝날 수 있습니다.
즉, 파생 된 유형에 더 이상 데이터를 추가하지 않기 때문에 위의 인스턴스에서 ***** 아마도 ***** 벗어날 수 있습니다.이것은 보증이 아닙니다.나는 여전히 그렇게하지 마 라고 조언합니다. 할 수있다 는 사실이 해야 한다는 의미는 아닙니다.
편집 : 예, 이것은 ShaChris23의 게시물에 대한 답변입니다.아래가 아닌 메시지 위에 표시 되었기 때문에 놓친 것 같습니다.
때로는 필요한 모든 유형에 대해 템플릿 화되지 않은 typedef를 명시 적으로 작성할 수 있습니다.기본 클래스가 typedef되기를 원하는 유형이 하나 뿐인 여러 템플릿 인수에 템플릿 화 된 경우 상속 된 클래스 이름에 효과적으로 포함 된 typedef를 사용하여 특수 클래스를 상속 할 수 있습니다.이 접근 방식은 메타 함수 접근 방식보다 덜 난해합니다.