24 January 2023

C++ 核心指南目录

“If you feel like overloading a lambda, use a generic lambda”

理由

你无法用相同的名字重载定义不同的 lambda

例子

void f(int);
void f(double);
auto f = [](char);   // error: cannot overload variable and function

auto g = [](int) { /* ... */ };
auto g = [](double) { /* ... */ };   // error: cannot overload variables

auto h = [](auto) { /* ... */ };   // OK

强化

  • 编译器会捕捉到重载 lambda 的情况