跳转至

ev-drogon-any-session-modify-003

字段 值
项目 drogonframework/drogon
固定 commit 3aae769cc405
路径 lib/inc/drogon/Session.h
行段 L108-L122
特性 std::any
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-25
测试代码 否
发现方式 tree-sitter

用法

会话容器按需创建 any 值,并在锁内做类型检查后调用处理器

为什么典型

sessionMap_ 存放跨请求的异构值;modify 在互斥量保护下查找、校验类型并传出引用,缺失时默认构造后插入。

摘录

    void modify(const std::string &key, Callable &&handler)
    {
        std::lock_guard<std::mutex> lck(mutex_);
        auto it = sessionMap_.find(key);
        if (it != sessionMap_.end())
        {
            if (typeid(T) == it->second.type())
            {
                handler(*(std::any_cast<T>(&(it->second))));
            }
            else
            {
                LOG_ERROR << "Bad type";
            }
        }

备注

生产路径;typeid 与 any_cast 组合在加锁域内完成,缺省分支在后续代码中创建新值。

查看固定 commit 源码 · 返回证据索引