簡體   English   中英

接受可變參數 lambda 時 std::function 的簽名

[英]Signature of std::function when accepting a variadic lambda

假設我有一個 lambda 和一個類; 我想將 lambda 作為靜態變量分配給類。 我怎么能那樣做?

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 ...)>'

請幫忙!

std::function是一個函數包裝器; 它不是函數模板包裝器。 它必須有一組特定的參數。 例如,您可以為參數列表int, double, float

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

我想將 lambda 作為靜態變量分配給類。

然后,也許最好不要將它包裝在std::function

inline static decltype(func) f_ = func;

但是當我分配喜歡

A::f_ = func;

然后就是抱怨...

這是因為您沒有將模板參數傳遞給模板變量。 這會起作用:

A::f_<int, double, float> = func;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM