说我有

 struct S {
    double A;
    double B;
    double C;
  };


   std::vector<S> vecS(10);

我正在尝试编写通用函数void F(std::vector<S> vecS,structure S.x),以便可以进行以下计算
 F(std::vector<S> vecS, structure S.x) {
        for(i=1;i<10;i++)
          vecS[0].x += vecS[i].x;
       // note the structure does not have memeber "x"
       // I want to give that as a generic input to access A,B or C
  }

上面的代码不是正确的代码,但是我只是试图演示我正在尝试计算的内容。

我正在尝试计算的是针对特定元素的结构 vector 进行循环。这有可能以简单的好方法吗?有人可以给我一些指示如何以通用方式访问结构的成员吗(也许那是我编写此函数所需要的)。

提前致谢。

最佳答案

您需要的是指向成员的指针:

void F( std::vector<S> &vecS, double S::*ptr )
{
    for(i=1;i<10;i++)
       vecS[0].*ptr += vecS[i].*ptr;
}

// now call for A
F( vec, &S::A );

如果您需要它与其他类型一起使用,不仅是这种情况下的double,请使用模板。

PS我首先没有注意到,但是在修改其中的元素时,必须将vector作为引用。

10-08 06:16