【发布时间】:2014-12-15 09:35:32
【问题描述】:
我有一个根据输入参数计算结构的函数。 是否可以编写一个函数,通过将所需变量作为参数传递,只返回计算结构的某个变量? 问题是结构必须在函数内部创建和计算,所以我只知道结构成员未来的变量名。
基本上我想要的是用我作为主“DoSomethingSpecific”函数的参数的变量替换以下硬编码的“->member1”部分。
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;
}
【问题讨论】:
-
你可以有一个指向成员的指针。不过看起来有点粗略。
-
如果我的结构在函数调用之前不存在,我如何获得指向该成员的指针?
-
结构的实例还是结构本身?您不需要实例来拥有指向成员的指针。
-
如果
member1是一个整数(int),那么只需创建一个带有int参数的DoSomethingElse函数?然后您可以将 anyint值或变量(成员或非成员)传递给它。