我已经用尽了耐心,试图找到这个特定的问题。
我试图将特定成员的名称从结构输入到函数中。
我首先想到的是这是不可能的,因为函数的参数需要是在RAM中声明和定义的变量。然而,计算机能够根据给定成员名称的每个实例来解释“成员”的位置。
以下是一个任意程序,其中我创建了一个结构数组,该程序将针对数组中的每个实例如何输入结构中每个成员的所有数据。然后它将尝试显示数组中特定成员的所有内容。这是不完整的,因为我不知道如何使其工作。
#include theUsual
// global variables
const int SIZE = 10;
// structures
struct structureExample
{
dataType member1;
dataType member2;
...
};
// functions
void inputData(structureExample s[], int size);
void displayMember( dataType member, structureExample s[], int size);
int main
{
structureExample sE[SIZE];
dataType memberName = member1 // member1 from the declared struct structureExample
inputData(sE,SIZE);
displayMember(memberName, sE, SIZE);
system("PAUSE");
return 0;
}
// inputs all the data for all members in an array of structure examples
void inputData(structureExample s[], int size)
{
...
}
// display's all of the content of a particular member from an array
void displayMember( dataType member, structureExample s[], int size)
{
for (int i = 0; i<size; i++)
{
cout << s[i].member << endl;
}
}
因此,从structureExample进入displayMember的任何成员名称都将被给出,它将为数组中的每个单元显示该成员的所有内容。
我对此有很多疑问,但最大的两个是,这还能行吗?如果是这样,我该如何进行这项工作?例子将不胜感激。
提前致谢!
看来您要在成员上使用指针:
struct structureExample
{
int member1;
float member2;
};
template<typename M>
void displayMember(M structureExample::*member, structureExample s[], int size)
{
for (int i = 0; i < size; i++)
{
std::cout << s[i].*member << std::endl;
}
}
int main()
{
structureExample sE[SIZE];
auto member = &structureExample::member1;
inputData(sE,SIZE);
displayMember(member, sE, SIZE);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句