我试图实现持有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
它没有必要作出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>
这个工作。
对我来说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{};