将lambda传递给成员变量的构造函数

时间:2019-03-11 14:56:58

标签: c++ templates constructor

请考虑以下课程,

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()>可以工作,但是据我所知,这意味着调用虚函数(当然,这不一定是坏的,但是如何正确地执行此操作会很有趣)。

1 个答案:

答案 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;
};