I am trying to algorithm support for a static list of objects. I have tried to do this various ways but the only way I can get it to work is to write a traditional C for loop.
Example:
class ListNode
{
public:
ListNode(int id);
virtual ~ListNode() {}
// Container support functions
ListNode* operator++() {return m_nextNode;}
static ListNode* findNode(int p_id);
static ListNode* m_nodeList{nullptr};
private:
int m_id;
ListNode *m_nextNode;
protected:
static void addNewNode(ListNode* p_node);
friend ListNode* begin(void);
};
inline ListNode* begin(void) {return ListNode::m_nodeList;}
inline ListNode* end(void) {return nullptr;}
// Declare the list head
ListNode* ListNode::m_nodeList = nullptr;
// Constructor
ListNode::ListNode (int id): m_id{id}
{
ListNode::addNewNode(this);
}
// Add node to front of list
void ListNode::addNewNode(ListNode* p_node)
{
p_node->m_nextService = m_nodeList;
m_nodeList = p_node;
}
//
// The following are all the find implementation attempts
//
ListNode* ListNode::failedFind1(int id) {
return std::find_if(ListNode::m_nodeList,
static_cast<ListNode*>(nullptr),
[p_serviceNumber](const ListNode& s) {
return id==s.m_id;
}
);
I also tried this using the begin() and end() functions defined. The only thing that works is the following:
for (auto *s = m_nodeList; s != nullptr; s = s->m_nextNode)
{
if (s->m_id == id)
return s;
}
return nullptr;
What am I missing?
Thanks
Aucun commentaire:
Enregistrer un commentaire