C ++将struct成员作为参数传递

时间:2014-10-20 11:53:10

标签: c++ struct arguments

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

基本上我想要的是替换以下硬编码" - > member1"部分由一个变量,我作为主要参数#34; DoSomethingSpecific"功能

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

编辑: 我创建了一个基于现在有效的答案的最小示例,并解决了将struct成员作为变量传递给函数而不创建结构本身的实质性问题。但是,在这种情况下,必须先知道数据类型(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;   
}  

2 个答案:

答案 0 :(得分:4)

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

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;
}

答案 1 :(得分:0)

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