请考虑以下课程,
template <class L>
class A {
public:
A(L l) : _l(l) {}
private:
L _l;
};
class B {
public:
B(int x) : _x(x), _a([this]() { return _x; }) {}
private:
int _x;
A<???> _a;
};
我不确定如何在???
中指定类型。 std:: function<int()>
可以工作,但是据我所知,这意味着调用虚函数(当然,这不一定是坏的,但是如何正确地执行此操作会很有趣)。
答案 0 :(得分:2)
您可以使用大致等效的功能对象,而不是lambda。
template <class L>
class A {
public:
A(L l) : _l(l) {}
private:
L _l;
};
class B {
struct GetX
{
int operator()() const { return _b->_x; }
B * _b;
};
public:
B(int x) : _x(x), _a(GetX{ this }) {}
private:
int _x;
A<GetX> _a;
};