C++实现Undo栈:函数回调存储的实现难题求助
问题:Undo栈的函数回调存储实现困境
我需要实现一个可存储函数调用的栈来充当“Undo”栈,但在栈的回调实现上遇到了极大困难。以下是我目前的代码实现:
结构体/栈实现
struct Node { void (*fn)(void*); struct Node *next; }; struct Node* Top = nullptr;
Push和Pop实现
void push(void(*call_function)){ Node* newnode = new Node; newnode->next = Top; Top = newnode; Top->fn = call_function; } void* pop(){ if(Top == nullptr){ return nullptr; } void* ret = Top -> fn; Node* temp = Top; Top = Top->next; delete temp; return ret; }
预期使用示例
核心逻辑是调用函数后,将可撤销该操作的函数加入栈中,弹出栈时即可撤销最近操作:
// 在列表末尾追加s;必要时将底层数组容量加倍 // 支持撤销 void insert_back(const string &s) { insert_before(size(), s); *** push((void*)remove_at(size()-1)); *** } // 在列表头部插入s;必要时将底层数组容量加倍 // 支持撤销 void insert_front(const string &s) { insert_before(0, s); *** push((void*)remove_at(0)); *** }
我尝试过使用指针强制转换、更换实现方案、不使用指针等方法,但仍未解决问题。
内容的提问来源于stack exchange,提问作者Sahir Sood
相关产品推荐
相关产品推荐

