передать лямбду в конструктор переменной-члена - PullRequest
0 голосов
/ 11 марта 2019

Рассмотрим следующие классы,

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 Ответ

2 голосов
/ 11 марта 2019

Вместо лямбды вы можете использовать функциональный объект, который примерно эквивалентен.

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;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...