2014-04-09 2 views
1

나는 나무 구조체를 만들었는데 그 중 두 가지는 다음과 같이 정의됩니다.struct-within-struct의 속성에 직접 액세스 하시겠습니까?

template < class T, int W, int H > 
struct dataRect { 
    const int w = W; 
    const int h = H; 
    const int l = W * H; 
    T d[W * H]; 
}; 

template < class T > 
struct Vec2{ 
    T x; 
    T y; 
    // more things 
}; 

세 번째 것은 기본적으로 이전 구조체 중 하나를 포함하는 구조체입니다.

template < class T, int W, int H > 
struct xDataRect { 
    dataRect<T, W, H> r; 
    Vec2<int> p; 
}; 

지금 그것이 가능 직접

xdr.x = 3; 

대신

xdr.p.x = 3; 
로 처음 두 구조체의 속성에 액세스 할 수 있도록하는 방법이 내가 xDataRect의 XDR이 있다고 할 수 있습니다

등 완벽하게 상호 교환 가능합니까? (즉, xdr.x를 변경하면 xdr.p가 변경되고 xdr.p는 xdr.x가 변경됩니다.)

이것은 중요하지 않지만 (xdr.px 항상 쓸 수 있음) 그것을 할 수있는 방법이 있는지 확인하십시오.

+0

아니오 C++에는 C++/cli 또는 C#과 같은 속성이 없습니다 (참조를 사용할 수는 있지만 추가 오버 헤드입니다). –

+0

감사합니다. 참고 자료는 내가 찾고 있던 것입니다 (나는 어떻게 호출되었는지 알지 못했습니다) . – agecaf

+0

사용하지 않는 것이 좋습니다! –

답변

0

C++에는 상속 관계가 있습니다.

Vec2<int>을 xDataRect의 기본으로 정의 할 수 있습니다. 이 방법은 .x 및 .y를 xDataRect 객체에서 사용할 수 있습니다.

xDataRect::operator=(Vec2<int>)을 오버로드하면 다른 필드에 영향을주지 않고 x 및 y 만 설정할 수 있습니다.

관련 문제