Существует простой тип данных POD, такой как
struct Item {
int value1;
double value2;
bool value3;
}
Теперь я хотел бы написать различные функции подсчета, как это можно сделать с помощью следующего кода (или некоторого метода std):
typedef bool Selector(const Item& i);
int count(const vector<Item>& items, Selector f) {
int sum = 0;
BOOST_FOREACH(const Item& i, items) {
if(f(i)) {
sum++;
}
}
return sum;
}
с f
например,
bool someSimpleSelector(const Item& i) {
return i.value1 > 0; // quite simple criterion
}
Однако при таком подходе компилятор не может встроить вызов функции и, следовательно, не встроит мой (тривиальный) код выбора.
Мой вопросбудет: есть ли возможность реализовать приведенный выше код таким образом, чтобы компилятор мог встроить мой код выбора, но без явной и полной реализации функции счетчика снова и снова (например, с помощью шаблонов)?