Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中结构体的索引器的实现_C++_Qt_Qt5 - Fatal编程技术网

C++中结构体的索引器的实现

C++中结构体的索引器的实现,c++,qt,qt5,C++,Qt,Qt5,我在c++/qt中有下面的三角形结构,我想为它实现一个索引器,这样我就可以通过索引访问任何顶点,有人能帮我解决这个问题吗 下面是结构: struct Triangle { QVector3D *a; QVector3D *b; QVector3D *c; } 如果您确实需要它,您可以向类中添加运算符[],如下所示: struct Triangle { QVector3D *a; QVector3D *b; QVector3D *c; QVector3D * operat

我在c++/qt中有下面的三角形结构,我想为它实现一个索引器,这样我就可以通过索引访问任何顶点,有人能帮我解决这个问题吗

下面是结构:

struct Triangle
{
    QVector3D *a;
    QVector3D *b;
    QVector3D *c;
}

如果您确实需要它,您可以向类中添加运算符[],如下所示:

struct Triangle
{
QVector3D *a;
QVector3D *b;
QVector3D *c;
QVector3D * operator[](int n) {return n==0?a:n==1?b:n==2?c:Q_NULLPTR;}
};

Triangle tr; 
//.....
auto test = tr[0]; //will return vector 'a'

如果您确实需要它,您可以向类中添加运算符[],如下所示:

struct Triangle
{
QVector3D *a;
QVector3D *b;
QVector3D *c;
QVector3D * operator[](int n) {return n==0?a:n==1?b:n==2?c:Q_NULLPTR;}
};

Triangle tr; 
//.....
auto test = tr[0]; //will return vector 'a'
您可以使用std::数组

如果您不打算在结构三角形中添加更多的功能,请考虑使用

using Triangle = std::array<QVector3D *, 3>;
您可以使用std::数组

如果您不打算在结构三角形中添加更多的功能,请考虑使用

using Triangle = std::array<QVector3D *, 3>;

听起来你已经习惯了C语言,在这里你需要创建新的对象。在C++中,你没有。p>
struct Triangle
{
    QVector3D a;
    QVector3D b;
    QVector3D c;
    QVector3D& operator[](int);
}

QVector3D& Triangle::operator[](int which)
{
     switch(which)
     {
          case 0: return a;
          case 1: return b;
          case 2: return c;
          default: throw std::out_of_range("Must be 0-2");
     }
}
这声明了C意义上的get和set,您可以在赋值的任意一侧使用它,具有普通意义。例如

Triangle t;
auto point = t[1];
t[2] = { 1, 2, 3 };

听起来你已经习惯了C语言,在这里你需要创建新的对象。在C++中,你没有。p>
struct Triangle
{
    QVector3D a;
    QVector3D b;
    QVector3D c;
    QVector3D& operator[](int);
}

QVector3D& Triangle::operator[](int which)
{
     switch(which)
     {
          case 0: return a;
          case 1: return b;
          case 2: return c;
          default: throw std::out_of_range("Must be 0-2");
     }
}
这声明了C意义上的get和set,您可以在赋值的任意一侧使用它,具有普通意义。例如

Triangle t;
auto point = t[1];
t[2] = { 1, 2, 3 };

举一个例子,说明你想要什么以及它应该返回什么?我希望索引器像数组索引器一样工作;例如,我想使用三角形[0],就像使用c索引器一样!为什么不改用std::vector呢?主题外但。。。成员a、b和c的类型为QVector3D*而不是简单的QVector3D*是否有充分的理由?请举例说明您想要的方式以及它应该返回什么?我希望索引器像数组索引器一样工作;例如,我想使用三角形[0],就像使用c索引器一样!为什么不改用std::vector呢?主题外但。。。成员a、b和c的类型是QVector3D*而不是简单的QVector3D*有什么好的理由吗?你甚至可以直接使用简单的数组、QList或QVector,但我认为作者需要a、b、c在其他地方,因为整个结构实际上是overhead@Xplatforms使用三角形=std::vector;可以。假设一个三角形总是有3个点,std::array更合适。你甚至可以直接使用简单的array、QList或QVector,但我认为作者需要a、b、c,因为整个结构实际上是overhead@Xplatforms使用三角形=std::vector;可以。假设三角形总是有3个点,std::array更适合。