2014-04-09 108 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; 
}; 

现在可以说我有一个xDataRect XDR,是有办法,使其可以直接作为

xdr.x = 3; 

,而不是

xdr.p.x = 3; 
访问前两个结构的属性

这样它们完全可以互换? ((换句话说,改变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而不影响其他字段。