如何使用lambda作为STL模板中的类进行比较的方法?

问题描述 投票:3回答:2

我试图实现持有priority_queue对象A<T>和使用自定义Compare方法/类型。按照reference example,这是我的代码:

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”:非静态数据成员不能有包含“自动”类型

我试图让LAMDA定义static,但它导致了一种新的语法错误:

错误C2143:语法错误:在“回归”缺少“}”

你能帮帮我吗?

更新:我使用VS2013

c++ lambda stl template-classes
2个回答
2
投票

它没有必要作出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;
};

不要忘了包括<functional>这个工作。


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{};
© www.soinside.com 2019 - 2024. All rights reserved.