C++11: 使用 lambda 创建模板类 的 对象
C++ 中 lambda 可以直接传递给模板函数如 std::sort, 但无法传给模板类如 std::map,但是,使用一点小技巧,可以使用 lambda 创建模板类的对象,省了很多麻烦的 coding。这里给出一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdio.h> #include <map> template<class Key, class Value, class Compare> std::map<Key, Value, Compare> make_map(Compare comp) { return std::map<Key, Value, Compare>(comp); } int main() { auto m = make_map<int,int>([](int x, int y) { return x < y; }); m[1] = 11; m[2] = 22; for (auto x : m) { printf("%d->%dn", x.first, x.second); } return 0; } |
make_map 可以被返回值优化掉。