C++将结构成员作为参数传递

C++ Pass struct member as argument

本文关键字:参数传递 成员 结构 C++      更新时间:2023-10-16

我有一个函数,它根据输入参数计算结构。是否可以编写一个函数,通过将所需变量作为参数传递,只返回计算结构的某个变量?问题是结构必须在函数内部创建和计算,所以我只知道结构成员的未来变量名。

从本质上讲,我想要的是用一个变量来替换以下硬编码的"->member1"部分,该变量作为主"DoSomethingSpecific"函数的参数。

double DoSomethingSpecific()
{
  struct *s = CalculateStruct();
  DoSomethingElse(s->member1);
}

编辑:我根据一个现在有效的答案创建了一个最小的例子,解决了将结构成员作为变量传递给函数而不创建结构本身的实质性问题。然而,在这种情况下,数据类型(int)必须在之前已知(否则,如果需要,模板会有所帮助)

#include <iostream>
using namespace std;
struct MyStruct
{
   int a;
   int b;
};
int GetVariable(int MyStruct::* field)
{
   MyStruct *_myStruct = new MyStruct();
   _myStruct ->a = 1;
   _myStruct ->b = 2;
   return _myStruct->*field;
}
int main( )
{
   int my_variable = GetVariable(&MyStruct::a); 
   return 0;   
}  

您可以传入指向数据成员的指针:

double DoSomethingSpecific(double Struct::* field)
{
  Struct *s = CalculateStruct();
  DoSomethingElse(s->*field);
}

然后称之为:

DoSomethingSpecific(&Struct::member1);

编辑,根据您编辑的问题进行修复:

int GetVariable(int MyStruct::* field)
{
    MyStruct *_myStruct = new MyStruct();
    _myStruct->a = 1;
    _myStruct->b = 2;
    return _myStruct->*field;
}

如果你知道它的类型,你可以向它传递一个指针。在构造Struct时,你可以使用指针初始化成员。