Как использовать bool (*pFunc)(T * data) как условие в C++ arduino?

Я нашел реализацию односвязного списка для arduino. В нем есть метод для поиска элемента по условию.

Как правильно реализовать это условие? (оно должно подходить под обобщенный тип данных - T)

Название функции - "GetBy"

Реализация списка:

template <typename T>
class List
{
public:
List();
~List();

List<T> * parentList;
char * name;
byte * level;
int8_t cursor = 0; // значение курсора

void init(char * name, byte *level = 0, List<T> * parentList = nullptr){
    this->name = name;
    this->level = level;
    this->parentList = parentList;
}

bool dataAsObject=true; // флаг, что данными будут объекты

T* push_back (T *data); // функция вставки нового элемента в конец списка
void push_front(T *data); // вставка в начало списка
void insert(T *data, int index);
T * removeAt(int index, bool toOut = false);
T * pop_front(bool toOut = false );
T * pop_back(bool toOut = false);
void clear();


int length(){return Size;} // возвращает длину

T* get(int index);

T* getBy(volatile bool (*pFunc)(T * data) ) { // возвращает элемент списка согласно функции выборки pFunc
    int counter = 0;
    int s = this->Size;
    Node<T> *current = this->head;
    while (counter < s)  {
        if (  pFunc(current->data)  ) {
            return current->data;
        } else {
            current = current->pNext; // pNext здесь УКАЗАТЕЛЬ
            counter++;
        }
    }
    return NULL;
};
T * operator[](int index);

T * cursorChange(int8_t direct){
    if (cursor==0 && direct < 0){
        cursor = 0;
    } else {
        cursor = cursor + direct;
    }
   
    if (cursor > Size -1) cursor = Size - 1;
    if (cursor < 0) cursor = 0;
    return getCursorItem();
}
T* getNextItem(){
    cursorChange(1);
}
 T* getPrevItem(){
    cursorChange(-1);
}

T* getCursorItem(){
    return this->get(this->cursor);
}
List<T> * parent(){
    return this->parentList;
}

private:
int Size;

// внутренний класс. Узел
template <typename U> ////// ??????????????? U а не Т - тогла компилится
class Node
{
public:
    Node *pNext;
    T *data; // УКАЗАТЕЛЬ на объект

    Node (T *data = T(), Node *pNext = nullptr){ // принимает УКАЗАТЕЛЬ на сторонний объект другого класса!
        this->data = data;
        this->pNext = pNext;
    };
    ~Node(){
        //Serial << "Вызвался дестркутор объекта класса Node" << endl;
    }
};

Node<T> *head; // головной элемент
};

Ответы (0 шт):