C++有办法通过名称访问std::vector元素吗



我正在试验一个简单的顶点类。

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_xv0.coords_yv0.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.xv0.coords.yv0.coords.z

最新更新