有没有办法静态或动态地检测和/或检索在 lambda 函数中捕获的值?
例如,对于用例:
randomFunction([this](){ methodCall(); });
这可能吗?
void randomFunction(std::function<void()> lambda) {
... // Detect if lambda capture is 'this'
MyClass* obj = /* retrieve lambda capture 'this' */;
...
}
假设 MyClass 是已知的,将始终相同,并且所有这些都发生在模板函数中。是否至少有一些特征/技巧可以根据 lambda 捕获来区分调用哪个模板函数?
最佳答案
您已经捕获了 this
,那么为什么不直接从 lambda 中返回它呢?如果相应的对象不再可访问,当然会出现困惑。
#include <iostream>
#include <functional>
class MyClass;
void randomFunction(std::function<MyClass*()> lambda)
{
std::cout << __PRETTY_FUNCTION__ << '\n';
MyClass* obj = lambda();
}
class MyClass
{
public:
void methodCall()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
void test()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
auto lambda = [this]() { methodCall(); return this; };
randomFunction(lambda);
}
};
int main()
{
MyClass mc;
mc.test();
}
关于c++ - 检测/获取 lambda 函数的捕获值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601697/