2
我試圖使用lambda的decltype作爲模板參數。使用lambda的dectltype作爲模板參數
auto compare = [](int a, int b){return a < b;};
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue;
的cppreference.com說,我可以做到這一點:
// From the cpprefernce.com
auto cmp = [](int left, int right) { return (left^1) < (right^1);};
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);
但是,當我嘗試編譯,我得到
src/main.cpp:22:64: error: use of deleted function ‘main()::<lambda(int, int)>::<lambda>()’
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue;
^
src/main.cpp:21:18: note: a lambda closure type has a deleted default constructor
auto compare = [](int a, int b){return a < b;};
^
src/main.cpp:22:64: note: when instantiating default argument for call to std::priority_queue<_Tp, _Sequence, _Compare>::priority_queue(const _Compare&, _Sequence&&) [with _Tp = int; _Sequence = std::vector<int>; _Compare = main()::<lambda(int, int)>]
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue;
^
我不明白爲什麼我不能做這個。我甚至沒有嘗試使用lambda的構造函數嗎?
不管怎麼說,我都會把這個lambda嵌入到'std :: function'中 – Rerito