gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:50:27 24 4
gpt4 key购买 nike

我正在尝试实现 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);
};

但我收到以下错误:

error C2853: 'cmp' : a non-static data member cannot have a type that contains 'auto'

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

error C2143: syntax error : missing '}' before '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;
};

不要忘记包含 <functional>为了这个工作。

关于c++ - 如何在模板类中使用 lambda 作为 STL Compare 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54544999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com