Я пытаюсь написать функцию, как описано в заголовке. Я создал шаблонный массив dynamic c под названием queue, и мне нужно создать функцию, которая проверяет каждый элемент этой очереди, удовлетворяется ли предикат, переданный аргументом; если это так, мне нужно применить оператор к этому элементу, также переданному аргументом.
Прежде всего мне, вероятно, нужно объяснение ... предикат должен быть унарным, чтобы это могло быть что-то вроде «isdi git» или «isalpha», верно? и в качестве оператора это может быть что-то вроде простого постинкремента ++. Основная проблема в том, что я действительно понятия не имею, как передавать операторы и предикаты в качестве параметров в функции.
Если я понял запрос, вот что я пытался сделать, но, конечно, не работает ... Кто-нибудь помогает?
template<typename L, typename OPERATOR>
void change_if(queue<L> &que, bool (*f)(L), OPERATOR op) {
for(int i=0; i<que._size-1; i++) {
if ((*f)(que._queue[i]))
que._queue[i] = op(que._queue[i]);
}
}
int main(){
//as constructor, 3 is referred to size of the queue and 99 to the values.
queue<int> q(3, 99);
change_if(q, isdigit, ++);
}