在C++ 11中,有没有办法模板化lambda函数?或者它本身太具体而无法模板化?
我理解我可以定义一个经典的模板类/仿函数,但问题更像是:语言是否允许模板化lambda函数?
可能重复:
C++ 0x和缺乏多态Lambda - 为什么?
C++ 0x lambda表达式支持返回类型推断到某一点.为什么参数类型也不是自动确定的?
例如,为什么我不能写:
void somefunc(const std::vector<int>& v)
{
std::sort(v.begin(), v.end(), [](x, y) { return x < y; });
}
Run Code Online (Sandbox Code Playgroud)
似乎编译器应该能够找出它x
并且y
是类型的int
.
我最近升级了我,g++
所以我可以享受lambda功能.一切都很棒,我非常感谢那些在C++和gcc中成功的人.我似乎无法解决一件事 - 如何让lambda的参数被模板化?以下是用于演示此问题的lambda用法的基本示例.
示例#1,一切都很美味:
#include <cstdio>
struct bar {
bar () {}
void say () {
printf ("bar::say()\n");
}
void say () const {
printf ("bar::say() const\n");
}
};
template <typename T>
void do_work (const T & pred) {
bar b;
pred (b);
}
int main () {
do_work ([] (bar & b) { b.say (); });
}
Run Code Online (Sandbox Code Playgroud)
现在,假设do_work
现在使用不同的参数类型调用谓词两次.所以这里是示例#2:
#include <cstdio>
struct foo {
foo () {}
void say () {
printf ("foo::say()\n");
}
void say …
Run Code Online (Sandbox Code Playgroud) lambdas(匿名函数)的概念对我来说非常清楚.而且我知道类的多态性,运行时/动态调度用于根据实例的派生类型调用适当的方法.但是lambda究竟能够多态化吗?我是另一个Java程序员,试图学习更多有关函数式编程的知识.