왜 C++에는 아직도 super가 없나요


개인적으로 다음 코드 처럼 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++ 표준이 아닌지 입니다
  • 2016년 01월 29일에 작성됨

조회수 732


1 답변


좋아요
0
싫어요
채택취소하기

super에 대한 논의는 거의 끝났고, 아마 표준으로 등록될 일은 없다고 봐야 합니다.

Bjarne Stroustrup의 (이탈릭%%%%)Design and Evolution of C++에 써져 있기를 C++ 표준을 처음 만들 때, ISO C++ 표준 위원회가 super 키워드에 대해 생각해 본 적이 있다고 합니다.

Dag Bruck이 부모 클래스를 "inherited"로 부르자고 제시했었고, 이때는 다중 상속에서 모호성이 문제가 되었습니다.

Dag Bruck은 이 기능이 구현 가능하고, 기술적으로 안정적(sound)이고, 다중 상속에서도 쓸 수 있다고 주장했는데 기관에서는 들이는 비용에 비해 그만한 가치가 없다고 판단했지요.

나중에 Michael Tiemann이 질문하신 것과 같은 typedef를 쓰는 방법도 썩 나쁘진 않다고 증명하고 이 논의는 끝났습니다.

100퍼센트 까지는 아니지만 super가 공식적으로 지원되는 일은 아마 없을 겁니다

  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close