c++ - 如何在模板类中使用 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
解决方案
对我来说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{};
推荐阅读
- rundeck - Rundeck Enterprise 作业/工作流的部署和测试策略
- python - 尝试在 Windows 10 中执行 django-admin makemessages
- python-3.x - 从从列表动态创建的复选框和下拉列表中获取值
- mips - MIPS 打印数学方程
- google-sheets - 使用谷歌表格中的计算字段和总和进行查询
- java - Java 无法返回 JSONArray:意外的返回值
- core-data - SwiftUI:使用 Core Data 关系数组的更改更新 View
- csv - 如何从我的 Heroku 下载 csv 更改
- google-chrome - Chrome 扩展模拟键盘输入
- c++ - 如何在一个类中定义一个包含 n 个元素的数组