跳转至

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 让注册表以单一类型接收并在两条遍历路径上复用。

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