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 在类型擦除中的作用。