ev-abseil-function-flags-003¶
| 字段 | 值 |
|---|---|
| 项目 | abseil/abseil-cpp |
| 固定 commit | 2065f4ded055 |
| 路径 | absl/flags/reflection.cc |
| 行段 | L183-L192 |
| 特性 | std::function |
| 许可证 | Apache-2.0 |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-30 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用 std::function 接收遍历回调,对每个注册项统一调用
为什么典型¶
遍历接口不关心访问者捕获了什么;擦除成 std::function 后按值传入即可,内部容器不必暴露给调用方。
摘录¶
void ForEachFlag(std::function<void(CommandLineFlag&)> visitor) {
FlagRegistry& registry = FlagRegistry::GlobalRegistry();
if (registry.finalized_flags_.load(std::memory_order_acquire)) {
for (const auto& i : registry.flat_flags_) visitor(*i);
}
FlagRegistryLock frl(registry);
for (const auto& i : registry.flags_) visitor(*i.second);
}
备注¶
生产路径;访问者签名固定、状态任意,std::function 让注册表以单一类型接收并在两条遍历路径上复用。