use*_*986 3 c++ pointer-to-member
说我有
struct S {
double A;
double B;
double C;
};
Run Code Online (Sandbox Code Playgroud)
和
std::vector<S> vecS(10);
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个通用函数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
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不是正确的代码,但我只是想说明我想要计算的内容.
我想要计算的是循环特定元素的结构向量.这可能是一个简单的好方法吗?有人可以给我一些指示如何以通用方式访问结构的成员(也许这就是我需要编写这个函数).
提前致谢.
你需要的是指向成员的指针:
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 );
Run Code Online (Sandbox Code Playgroud)
如果您需要它使用不同类型,不仅double
如此情况,请使用模板.
PS我没有先注意到,但你需要传递矢量作为参考,因为你修改了元素.