Рассмотрим следующее:
typedef struct {
int a;
int b;
int c;
int d;
} ABCD;
typedef std::vector<ABCD> VecABCD;
Скажем, я хотел добавить каждый элемент 'a' в вектор типа VecABCD. Легко! Я просто петлю через вектор и суммирую, когда я иду.
int CalcSumOfA(const VecABCD &vec)
{
int sumOfA = 0;
VecABCD::const_iterator it;
for(it=vec.begin();it!=vec.end();it++)
sumOfA += it->a;
return sumOfA;
}
Скажем, я хотел сделать то же самое с "b"? Легко! Я бы написал... по сути, ту же функцию, но только с незначительными изменениями. То же самое с 'c' и 'd'.
Итак, есть ли более сжатый, менее повторяющийся способ сделать это? Я хотел бы сделать что-то вроде:
int sumOfA = SumOfMembers(myVec, a);
но я не могу представить, как бы я соединил такую функцию. В идеале это был бы шаблон, и я мог бы использовать его с вектором любой структуры, не связанным с VecABCD. У кого-нибудь есть идеи?