首先,我想说这是我在stackOverflow上提出的第一个问题,如果表述不清楚,请见谅。
我的问题涉及在函数内部参数化地引用结构体特征。我使用C++语言。
我真正想要实现的是,能够根据给定的参数对一个包含结构体对象(或类对象)的向量进行排序。
我还希望通过模板来指定结构体的类型,因此一些处理特定情况的方法可能不适用于通用情况。
我将展示一个简单的例子,以说明我的意思。
假设我有一个名为“human”的结构体,其中包括“age”、“height”和“weight”等特征。
同时,假设我有一个名为“mankind”的“human”对象向量。
在这里,我想创建一个函数,根据我传递的参数,能够输出每个元素的年龄、身高或体重。
下面的代码显然行不通。我想请问正确的做法是什么。
我的问题涉及在函数内部参数化地引用结构体特征。我使用C++语言。
我真正想要实现的是,能够根据给定的参数对一个包含结构体对象(或类对象)的向量进行排序。
我还希望通过模板来指定结构体的类型,因此一些处理特定情况的方法可能不适用于通用情况。
我将展示一个简单的例子,以说明我的意思。
假设我有一个名为“human”的结构体,其中包括“age”、“height”和“weight”等特征。
同时,假设我有一个名为“mankind”的“human”对象向量。
在这里,我想创建一个函数,根据我传递的参数,能够输出每个元素的年龄、身高或体重。
下面的代码显然行不通。我想请问正确的做法是什么。
struct human{
int age;
int height;
int weight;
};
void show(vector<human> &elements, int value){
for (int i=0; i<elements.size(); i++)
cout << elements[i].value << endl;
}
int main{
...
vector<human> mankind;
...
show(mankind, age);
show(mankind, height);
show(mankind, weight);
...
return 0;
}
我想指出,这个例子是一个非常简单的情况。当然,如果我为每个功能制作单独的函数或者使用一种聪明的方法,比如将字符串“age”、“height”或“weight”作为参数传递,检查它并为每个参数设置完全不同的情况,那么我可以使这个工作成功。
然而,在问题的一般情况下,这样的变通方法不起作用,特别是如果我有许多不同类型的结构体(通过template T
和vector< T >
传递),以及许多功能。