왜 C++에는 아직도 super가 없나요
조회수 9773회
개인적으로 다음 코드 처럼
typedef <Base> super;
로 super를 쓰고 있는데 아무런 문제가 없습니다.
super()
로 부모 클래스의 생성자 호출도 가능하고,
super::
처럼 namespace도 쓸 수 있고,
그리고 자식의 자식에서도 재정의해서 계속 쓸 수 있는데
왜 C++은 super
를 표준으로 만들지 않죠?
class Derived : public Base
{
public :
typedef Base super; //protected나 private영역에 있어도 됨
// 기타
} ;
Derived(int i, int j) : super(i), J(j) //생성자 호출 가능
{}
void Derived::foo()
{
super::foo() ; //namespace쓸 수 있음
}
class DerivedDerived : public Derived
{
public :
typedef Derived super; //상속에 상속에 상속이더라도 쓸 수 있음.
// 기타
} ;
void DerivedDerived::bar()
{
super::bar() ; //Derived::bar 호출
super::super::bar ; //Base::bar 호출
}
이렇게 잘 쓸 수 있는데 왜 C++은 super()
가 없을까요? 제가 묻고 싶은 건
typedef super
처럼 쓰는 게 저 뿐인지typedef super
를 쓰는 게 안 좋은 코드인지- 왜 아직까지
super
가 C++ 표준이 아닌지 입니다
1 답변
-
super
에 대한 논의는 거의 끝났고, 아마 표준으로 등록될 일은 없다고 봐야 합니다.Bjarne Stroustrup의 (이탈릭%%%%)Design and Evolution of C++에 써져 있기를 C++ 표준을 처음 만들 때, ISO C++ 표준 위원회가
super
키워드에 대해 생각해 본 적이 있다고 합니다.Dag Bruck이 부모 클래스를 "inherited"로 부르자고 제시했었고, 이때는 다중 상속에서 모호성이 문제가 되었습니다.
Dag Bruck은 이 기능이 구현 가능하고, 기술적으로 안정적(sound)이고, 다중 상속에서도 쓸 수 있다고 주장했는데 기관에서는 들이는 비용에 비해 그만한 가치가 없다고 판단했지요.
나중에 Michael Tiemann이 질문하신 것과 같은
typedef
를 쓰는 방법도 썩 나쁘진 않다고 증명하고 이 논의는 끝났습니다.100퍼센트 까지는 아니지만
super
가 공식적으로 지원되는 일은 아마 없을 겁니다
댓글 입력