跳至主要內容
C++ 实现 lambda 重载模式

C++17 引入了结构化绑定和模板参数包展开,使得我们可以优雅地实现 lambda 重载模式。该模式常用于 std::visit 等需要对多种类型进行分派的场景。

1. 原理与实现

核心代码如下:

// 定义一个模板结构体,将多个 lambda 继承并展开 operator()
template <class... Ts> struct overloaded : Ts... {
    using Ts::operator()...;
};
template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

KSJ大约 1 分钟C++C++17lambdastd::visit模板元编程