我正在试验一个简单的顶点类。
class Vertex
{
public:
std::vector<float> coords;
//other functionality here - largely irrelevant
};
假设我们创建一个Vertex
对象,如下所示:
Vertex v0(1.f, 5.f, 7.f);
我想知道是否有办法为向量的每个元素指定一个名称?
假设每个std::vector
的大小都只有3。我知道我可以通过v0.coords[0]
到v0.coords[2];
之类的方式访问向量的元素或索引
然而,我想知道是否有一种方法可以为向量的每个元素指定一个名称,即:
v0.coords.x == v0.coords[0];
v0.coords.y == v0.coords[1];
v0.coords.z == v0.coords[2];
因此,如果我要访问向量,我可以通过名称而不是索引进行访问。
这样的事情可能吗?如果是这样,我该如何创建这样的混叠?
我想知道是否可以为向量的每个元素指定一个名称?
不,没有。至少,不是你想要的方式。
我想你可以使用宏,例如:
#define coords_x coords[0]
#define coords_y coords[1]
#define coords_x coords[2]
现在,您可以根据需要使用v0.coords_x
、v0.coords_y
和v0.coords_z
。
或者,您可以使用getter方法,例如:
class Vertex
{
public:
vector<float> coords;
//other functionality here - largely irrelevant
float& x(){ return coords[0]; }
float& y(){ return coords[1]; }
float& z(){ return coords[2]; }
};
现在,您可以根据需要使用v0.x()
、v0.y()
和v0.z()
。
但实际上,在这种情况下,根本没有理由使用vector
。这只是一个错误的工作工具。使用struct
,例如:
struct Coords
{
float x;
float y;
float z;
};
class Vertex
{
public:
Coords coords;
//other functionality here - largely irrelevant
};
或者:
class Vertex
{
public:
struct
{
float x;
float y;
float z;
} coords;
//other functionality here - largely irrelevant
};
现在,您可以根据需要使用v0.coords.x
、v0.coords.y
和v0.coords.z
。