正在获取捕获的lambda的lambda调用运算符的地址



是否可以为具有捕获的lambda获取lambda调用运算符的地址?更重要的是:将这样一个指针分配给一个公共指针,该指针可以指向具有相同捕获和相同调用参数的不同Lambda?严格地说,将结果(class1::*)( ... )分配给另一个结果(class2::*)( ... )不应该是直接可能的,但您可能会做一些肮脏的把戏并强制转换指针,这可能是可能的,因为lambda类在理论上是可互换的。

那么什么是";适当的";语法?即使是一个肮脏的把戏。

不幸的是,以下代码的最后一行不起作用:

int main()
{
int i;
auto l100 = [&]()
{
i += 100;
};
using l100_t = decltype(l100);
using l100_fn = void (l100_t::*)();
l100_fn fn100 = &l100_t::operator ();
}

,它可以指向具有相同捕获和相同调用参数的不同Lambda

如果你有一些界面,期望用户提供一个";λ";";捕获";一组特定的值,并采用一组特定的参数,那么它就不再是lambda了。它只是一个函数指针,它被赋予一个指向包含"0"的结构的CCD_;捕获的";值作为其参数之一。毕竟,接收代码需要存储";捕获的";价值观,对吧?因此用户需要提供一个";捕获";结构和一个函数指针;捕获";结构和其他参数。

这就是您应该如何构建API:清晰明确。用户的工作不是确保他们捕捉到正确的参数;API的工作是告诉用户所需的值是;捕获";,并且用户提供与它们接口的功能指针。

是的,用户不能自动处理那些";捕获的";可通过名称访问的值;他们必须使用参数名称来获取它们。但API变得更加连贯,也变得不那么脆弱。

最新更新