2012-04-03 3 views
3

Stroustrup의 C++ 11 FAQ를 통해 C++ 11을 배우고 있습니다. 나는 질문이있다.RTTI는 최종 작업을합니까?

가상 함수가 클래스에서 final로 정의되면 RTTI (dynamic_cast 및 typeid)는 파생 클래스에서 여전히 작동합니까?


@MSalters : 기본 클래스에 가상 함수 final 선언

struct A { 
    virtual void f() final; // only one virtual function, but final 
}; 
struct B : A { 
}; 
A* pa = new B; 
B* pb = dynamic_cast<B*>(pa); // would this work? I guess it applies to typeid as well. 
+1

는 C++ 11 초안에 링크를 내 프로필을 참조하십시오. 완전한 최종 표준은 자유롭게 사용할 수 없으므로 지불해야합니다. 슬픈 일입니다. –

+0

@ RafałRawicki : [GitHub] (https://github.com/cplusplus/draft/tree/master/papers)에서 최신 N3376 (2012-02-28)을 사용할 수 있습니다. – ipc

+0

@ipc : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf에서 n3376을 직접 얻을 수도 있습니다. – kennytm

답변

3

(10.3/4) 오버라이드 (override) 할 수없는 : 내 의도 가정 해 봅시다이었다. 모든 멤버가 상속되기 때문에 여전히 상속됩니다 (모듈 12 장, 특수 멤버 함수). 따라서 파생 클래스는 다형성 (10.3/1)이며 RTTI가 작동합니다.

(나는 당신이 당신의 dtor final를 만들려고하지 않았다 있으리라 믿고있어. 문제가 해결되지 않습니다.)