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 组合在加锁域内完成,缺省分支在后续代码中创建新值。