跳转至

ev-abseil-invoke-r-003

字段 值
项目 abseil/abseil-cpp
固定 commit 2065f4ded055
路径 absl/functional/internal/any_invocable.h
行段 L116-L124
特性 std::invoke 与 std::apply
许可证 Apache-2.0
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-26
测试代码 否
发现方式 manual

用法

用 std::invoke 实现带返回类型归一化的通用调用器

为什么典型

类型擦除层必须同时处理成员指针、函数指针和仿函数;std::invoke 统一调用规则,再按 void 与非 void 分支处理返回值。

摘录

// An implementation of std::invoke_r of C++23.
template <class ReturnType, class F, class... P>
ReturnType InvokeR(F&& f, P&&... args) {
  if constexpr (std::is_void_v<ReturnType>) {
    std::invoke(std::forward<F>(f), std::forward<P>(args)...);
  } else {
    return std::invoke(std::forward<F>(f), std::forward<P>(args)...);
  }
}

备注

生产头文件;std::invoke_r 的提前实现,展示 invoke 在类型擦除中的作用。

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