C++ 接受可变lambda时std::函数的签名
假设我有一个lambda和一个类;我想将lambda作为静态变量分配给类。我怎么能这么做C++ 接受可变lambda时std::函数的签名,c++,lambda,C++,Lambda,假设我有一个lambda和一个类;我想将lambda作为静态变量分配给类。我怎么能这么做 auto func = [](void* p, auto&&... args) { /* do things */}; class A { static std::function<void(void*, ???)> f_; }; 然后它抱怨不完整类型“class std::function”的使用无效 请帮忙 std::function是一个函数包装器;它不是函数模板包装
auto func = [](void* p, auto&&... args) { /* do things */};
class A {
static std::function<void(void*, ???)> f_;
};
然后它抱怨不完整类型“class std::function”的使用无效
请帮忙 std::function
是一个函数包装器;它不是函数模板包装器。它必须有一组特定的参数。例如,对于参数列表int、double、float
,您可以这样做:
inline static std::function<void(void*, int, float, double)> f_ = func;
但是当我喜欢的时候
A::f_ = func;
A::f_ = func;
然后它在抱怨
这是因为您没有将模板参数传递给模板变量。这将有助于:
A::f_<int, double, float> = func;
A::f_=func;
std::function
是一个函数包装器;它不是函数模板包装器。它必须有一组特定的参数。例如,对于参数列表int、double、float
,您可以这样做:
inline static std::function<void(void*, int, float, double)> f_ = func;
但是当我喜欢的时候
A::f_ = func;
A::f_ = func;
然后它在抱怨
这是因为您没有将模板参数传递给模板变量。这将有助于:
A::f_<int, double, float> = func;
A::f_=func;
静态decltype(func)f_u=func
为什么它必须是std::function
?因为我打算模板化类A,这样每个专门化都会根据分配给它的func\uuuz
有不同的签名。std::function
只提供一个非模板化的操作符()重载,其签名由模板参数确定。如果f\u
是一个std::function
,那么就没有魔法可以让A::f\u>可以用不同数量的参数调用。我不清楚您想要实现什么,但是std::function
无法实现。您可以:模板类A{static std::function f_;}
,因此A
将具有std::function
static decltype(func)f_=func
为什么它必须是std::function
?因为我打算模板化类A,这样每个专门化都会根据分配给它的func\uuuz
有不同的签名。std::function
只提供一个非模板化的操作符()重载,其签名由模板参数确定。如果f\u
是一个std::function
,那么就没有魔法可以让A::f\u>可以用不同数量的参数调用。我不清楚您想要实现什么,但是std::function
无法实现。您可以:模板类A{static std::function f_;}代码>,因此A
将具有std::function
。