Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在模板类中使用lambda作为STL比较方法?_C++_Lambda_Stl_Template Classes - Fatal编程技术网

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{};