我在Vector
类中有两个函数,x()
和y()
从向量返回相应的分量。我希望能够使用成员变量代替(或同样)访问组件。
以前,我制作了x
和y
指针,它们直接指向组件数组data
-但这不是一个好的解决方案,因为有人可以更改指针,对吗?并且每次使用时都需要取消引用。
由于类的结构,我无法使用联合。
当前,我的想法是让成员变量x
和y
返回函数x()
和y()
的结果。这是可行的解决方案吗?
template <typename T>
class Vec2 : public VecBase<T, 2>
{
public:
T& x = x(); //Doesn't work but is what I'm trying to achieve
T& y = y();
T& x() const { return data[0]; }
T& y() const { return data[1]; }
}
编辑:应该更明显了-VecBase
是一个可变大小的矢量(vector2,vector3等)。当大小为2时,Vec2
会添加x
和y
,以便更轻松地访问组件。如果不粘贴所有代码,很难显示出来。哈。
我想要的结果是基本上能够像这样简单地访问向量的分量:
Vec2<int> vector;
vector.x = 20;
vector.y = 40;
解决方案中不需要功能x()
和y()
。
感谢您的帮助!
答案 0 :(得分:4)
您的推荐成员方法可以起作用:
template <typename T>
class Vec2 : public VecBase<T, 2>
{
public:
Vec2() : x(this->data[0]), y(this->data[1]) {}
T& x;
T& y;
};
但是,现在您有了用户定义的构造函数。此外,在引擎盖下仍将存在取消引用的情况。如果可能的话,我个人将完全避免这种过度复杂的情况。
尽管我知道您想以一种通用的方式来实现这一切,并且您的基地无法以一种很好的数学方式“自动”命名成员,但是请考虑您是否真的需要这个。为什么不只是几个Vec2
,Vec3
类型,它们实际上只是直接成员呢?你真的还需要更多吗?
将T
作为模板参数是一个好主意。
答案 1 :(得分:1)
我希望能够使用成员变量访问组件
然后只需使用struct
(或class
和public
成员):
template <typename T>
struct Vector
{
T x;
T y;
};
Vector<int> v;
v.x = 42;
v.y = data[2];
答案 2 :(得分:0)
在没有参考成员的情况下,几乎可以实现所需的一切。您可以分配给x()
的结果。
Vec2<int> vector;
vector.x() = 20;
vector.y() = 40;
请注意,您不应允许通过const Vec2
进行修改,因此应根据const限定重载x
和y
。
template <typename T>
class Vec2 : public VecBase<T, 2>
{
public:
const T& x() const { return data[0]; }
const T& y() const { return data[1]; }
T& x() { return data[0]; }
T& y() { return data[1]; }
};