首页 > 解决方案 > 将 lambda 传递给成员变量的构造函数

问题描述

考虑以下类,

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()>有效,但据我所知,这意味着虚函数调用(当然,这不一定是坏事,但如何正确地做到这一点会很有趣)。

标签: c++templatesconstructor

解决方案


您可以使用大致等效的函数对象,而不是 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;
};

推荐阅读