首页 > 解决方案 > 如何在模板类中使用 lambda 作为 STL Compare 方法?

问题描述

我正在尝试实现一个priority_queue包含A<T>对象并使用自定义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);
};

但我收到以下错误:

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

我试图使 lamda 定义static,但它导致一个新的语法错误:

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

你能帮我吗?

更新:我正在使用 VS2013

标签: c++lambdastltemplate-classes

解决方案


对我来说static完美无缺

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

对于非静态...通过 ausing怎么样?

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

lType cmp = lType{};

推荐阅读