Подпись std :: function при принятии variadi c lambda - PullRequest
0 голосов
/ 30 марта 2020

Предположим, у меня есть лямбда и класс; Я хочу назначить лямбда-класс в качестве переменной stati c. Как я мог это сделать?

auto func = [](void* p, auto&&... args) { /* do things */};
class A {
  static std::function<void(void*, ???)> f_;
};

Я не очень уверен, что поставить в вопросительных знаках. Я пытался

class A {
  template<class...Arg>
  static std::function<void(void*, Arg...)> f_;
};

Но когда я назначаю как

A::f_ = func;

Тогда он жалуется на invalid use of incomplete type ‘class std::function<void(void*, Arg ...)>’

Пожалуйста, помогите!

1 Ответ

2 голосов
/ 30 марта 2020

std::function - это функциональная оболочка; это не оболочка шаблона функции. У него должен быть определенный c набор аргументов. Вы можете сделать это, например, для списка аргументов int, double, float:

inline static std::function<void(void*, int, float, double)> f_ = func;

Я хочу назначить лямбда-класс в качестве переменной stati c.

Тогда, возможно, было бы лучше не оборачивать это в std::function:

inline static decltype(func) f_ = func;

Но когда я назначаю как

A::f_ = func;

Тогда он жалуется на ...

Это потому, что вы не передали аргументы шаблона в переменную шаблона. Это будет работать:

A::f_<int, double, float> = func;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...