Относно Function pointer

По-долу показания код ми е даден като пример за приложението на function pointer.

#include <iostream>
#include <vector>

void print(const std::vector<int> &v) {
    for (const int item : v) {
        std::cout << item << " ";
    }
    std::cout << "\n";
}

std::vector<int> filter(const std::vector<int> &numbers,
                        bool (*souldFilter)(int)) {
    std::vector<int> filtered;
    for (const int currNumber : numbers) {
        if (souldFilter(currNumber)) {
            filtered.push_back(currNumber);
        }
    }
    return filtered;
}

bool isBiggerThan3(int number) {
    return number > 3;
}

int main() {
    const std::vector<int> initialVct{1, 2, -78, 3, 4, -505, 5, 6, 7};
    std::vector<int> vec = filter(initialVct, isBiggerThan3);
    print(vec);

    return 0;
}

И той си работи. Ако заменя bool (*shouldFilter)(int)   с  bool shouldFilter(int). кода продължава да работи, гъвкавата функционалност се запазва а бързодействието не се влошава (тествах го с 10000 числа).

Та въпроса е, какъв е смисъла да се ползва function pointer вместо обикновен булев параметър?