在这里,文档描述了使用传递给其构造函数的 lambda 创建函子的机制。lambdas 将存储在哪里?它是通过自动编码在课堂上的某个地方吗?那你可以访问它们吗?我的意思不是电话,而是指针或链接。lambda 有一个未命名的 autogentype,事实证明 T::operator() 不能通过限定名称访问......
template<typename... Ts>
struct Overloader : Ts...
{
using Ts::operator()...; // exposes operator() from every base
};
template<typename... T>
Overloader(T...) -> Overloader<T...>; // C++17 deduction guide, not needed in C++20
int main()
{
auto o = Overloader{ [] (auto const& a) {std::cout << a;},
[] (float f) {std::cout << std::setprecision(3) << f;} };
}
后代类存储其父母。请注意,您继承自 lambda。
能。首先你需要知道你想要的 lambda 类型。如果您不将 lambda 直接传递给
Overloader,而是先将其放入变量中,则可以执行decltype.如果您将转移直接留给
Overloader,则必须从其模板参数中挑选出类型(部分专业化的任务)。找到类型后,将您的类型
Overloader转换为对所需 lambda 父级的引用。