如何在模板类中使用lambda作为STL Compare方法?

时间:2019-02-06 00:17:30

标签: c++ lambda stl template-classes

我正在尝试实现一个priority_queue对象,该对象包含A<T>个对象并使用自定义的Compare方法/类型。根据{{​​3}},这是我的代码:

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

但是我遇到以下错误:

  

错误C2853:'cmp':非静态数据成员不能具有包含'auto'的类型

我尝试制作lamda定义static,但会导致新的语法错误:

  

错误C2143:语法错误:“返回”前缺少“}”

您能帮我吗?

更新:我正在使用VS2013

2 个答案:

答案 0 :(得分:2)

不必将Bundle Version设为静态。相反,您可以执行以下操作:

bundle version string short

别忘了加入IPA来使它起作用。

答案 1 :(得分:2)

对我来说static表现完美

static auto cmp = [](A<T>* l, A<T>* r) {return l->value > r->value; };

对于非静态……如何通过using

using lType = decltype([](A<T>* l, A<T>* r) {return l->value > r->value; });

lType cmp = lType{};