C++ 如何在模板类中使用lambda作为STL比较方法?
我正在尝试实现一个C++ 如何在模板类中使用lambda作为STL比较方法?,c++,lambda,stl,template-classes,C++,Lambda,Stl,Template Classes,我正在尝试实现一个priority\u队列,它保存a对象,并使用一个自定义的Compare方法/类型。根据,这是我的代码: template <class T> class A{ T value; A(T _value):value(_value){} }; template <class T> class ProblematicClass{ auto cmp = [](A<T>* l, A<T>* r) {return
priority\u队列
,它保存a
对象,并使用一个自定义的Compare
方法/类型。根据,这是我的代码:
template <class T>
class A{
T value;
A(T _value):value(_value){}
};
template <class T>
class ProblematicClass{
auto cmp = [](A<T>* l, A<T>* r) {return l->value > r->value; };
std::priority_queue < A<T>*, std::vector<A<T>*>, decltype(cmp) > q(cmp);
};
模板
甲级{
T值;
A(T_值):值(_值){}
};
模板
类问题类{
自动cmp=[](A*l,A*r){返回l->value>r->value;};
std::priority_queueq(cmp);
};
但我得到了以下错误:
错误C2853:“cmp”:非静态数据成员的类型不能包含“auto”
我试图使lamda定义为静态
,但它导致了一个新的语法错误:
错误C2143:语法错误:“return”之前缺少“}”
你能帮我吗
更新:我正在使用VS2013无需将
cmp
设置为静态。相反,您可以这样做:
template <class T>
class A{
T value;
A(T _value):value(_value){}
};
template <class T>
class ProblematicClass{
std::function<bool(A<T>*, A<T>*)> cmp = [](A<T>* l, A<T>* r) {return l->value > r->value; };
std::priority_queue < A<T>*, std::vector<T>, decltype(cmp) > q;
};
模板
甲级{
T值;
A(T_值):值(_值){}
};
模板
类问题类{
函数cmp=[](A*l,A*r){返回l->value>r->value;};
std::priority_队列q;
};
不要忘了包括
,这样才能起作用。对我来说静态
非常有效
static auto cmp = [](A<T>* l, A<T>* r) {return l->value > r->value; };
你需要比“它不起作用”更具描述性,因为它可能不起作用的方式数不胜数。此外,至少在GCC 8.2上。一旦我添加了
static
该行的错误更改为:error C2143:syntax error:missing'}'在'return'@Emadpres-抱歉,但是。。。我无法复制。我使用的是VS2013tanks。它起作用了。一个后续问题:既然cmp
是类的共享实体,那么是否可以/更好地将其定义为静态?(顺便说一句,只需添加static
关键字就会产生语法错误)这是可能的。使用静态自动cmp
即使在GCC 4.9.2中也可以使用。不确定VS 2013。根据我的说法,它应该是静态的。
using lType = decltype([](A<T>* l, A<T>* r) {return l->value > r->value; });
lType cmp = lType{};