Как использовать 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; // головной элемент
};