You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:14:59