Прежде всего, я хотел бы сказать, что это первый вопрос, который я задаю для stackOverflow, поэтому я прошу прощения, если я не достаточно ясен.
Мой вопрос касается параметрического обращения к структуреособенность внутри функции. Я работаю в C ++.
Чего я действительно хочу добиться, так это уметь сортировать вектор объектов структуры (или объектов классов) на основе определенной функции структуры, который задается как параметр. Я также хочу указать тип структуры через шаблон, поэтому некоторые обходные пути, которые имеют дело с конкретными ситуациями, могут вообще не работать.
Я покажуупрощенный пример того, что я имею в виду.
Допустим, у меня есть структура под названием "человек" с функциями: "возраст", "рост", "вес".
Давайтетакже предположим, что у меня есть вектор «человеческих» объектов под названием «человечество».
Здесь, скажем, я хочу создать функцию, которая может выводить на экран возраст, рост или вес каждого элемента, в зависимости от того, чтоЯ прохожу какпараметр.
Код, приведенный ниже, явно не работает. Я прошу правильный способ сделать это.
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 >
) и особенности.