【发布时间】:2019-12-15 11:43:44
【问题描述】:
我很难实现一个返回闭包的类方法,该闭包捕获this(在示例中为Foo::f1)。我们的想法是将其用作Bar 中的一种回调。
第一个障碍是我没有弄清楚如何在usingstatement 中指定闭包类型。
#include <iostream>
class Foo {
public:
Foo() = default;
~Foo() = default;
// don't know what the correct type specification is
//using fptr = [](int)->int;
//using fptr = int operator()(int);
//using fptr = int (*)();
typedef int (*fptr)(int);
fptr f1(void) {
return [this](int k)->int { return k * this->x_; };
}
private:
int x_ = 2;
};
class Bar {
public:
Bar() = default;
~Bar() = default;
void setfun(Foo::fptr f) { f_ = f; }
void callfun() {
std::cout << "result = " << f_(8) << std::endl;
}
private:
Foo::fptr f_;
};
int main(int, char **) {
Foo foo;
Bar bar;
bar.setfun(foo.f1());
bar.callfun();
return 0;
}
vg
【问题讨论】:
标签: lambda callback closures c++17 using