살군의 보조기억 장치

Another memory device…

Nested class 사용시 주의점

leave a comment »

클래스 안에 정의한 클래스를 정의한 것을 nested class 혹은 inner/outer class 라고 한다. 앞의글에서 언급했던 문제를 해결하기 위해 nested class 를 정의해서 사용하면 어떨까 생각하다가 찾아본 c++ 표준에 관한 이야기이다. 물론 nested class 로는 답이 아니라 적용하지는 않았다.

단순하게 생각해서 클래스 안에 클래스를 정의한 것이므로 inner class 에서 outer class 에 모든 원소를 접근할 수 있을 것 같지만, 실상은 그렇지 않다. 오묘하게 정의된 c++ 표준 문제 때문이다.

There is a difference between C++03 and C++11 in this regards. So the answer varies depending on which compiler you are using.

If you are using a C++03 compliant compiler then:
Nested class cannot access all members of the enclosing class.

If you are using C++11 compliant compiler then:
Nested class can access all members of the enclosing class. Nested class is treated as just another member of the class.

C++03 Standard 11.8 Nested classes:
The members of a nested class have no special access to members of an enclosing class, nor to classes or functions that have granted friendship to an enclosing class; the usual access rules shall be obeyed.

C++11 Standard 11.7 Nested Classes:
A nested class is a member and as such has the same access rights as any other member.

알고보면 단순하지만, c++ 표준에 따라 다르게 만들어야될 경우에는 민감한 문제가 될 수 있다. 참고로 현재 opencv 의 경우 c++98 을 준수하며, c++11 은 추천사항이 아니다.

참고
Advertisements

Written by gomiski

2014/04/01 at 8:31 am

Posted in C++, General, Lecture

Tagged with , , , , , , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: