【发布时间】:2013-11-24 22:54:58
【问题描述】:
我必须创建一个模板,其返回值是指向某个 lambda 函数的指针(由模板参数确定)。
编译器反馈:
error: no matching function for call to ‘laptr(int)’
代码有什么问题?如何解决问题?
#include <iostream>
using namespace std;
template <typename T>
T laptr(int par);
int main(){
laptr(1);
return 0;
}
///////////
template <typename T>
T laptr(int par)
{
if (par == 1)
{
int p1 = [](int a, int b)->int{return a*b; };
return p1;
}
else
{
double p2 = [](double a, double b)->double{return a + b; };
return p2;
}
}
【问题讨论】:
-
编译器在调用
laptr方法时无法推断返回类型。 -
函数模板的模板参数只能从它的常规实参推导出来,而不是从它的主体推导出来。由于从不包含
T的参数中永远无法推导出T,所以这个模板只能称为laptr<sometype>(value),这显然是没有用的。 -
此外,您似乎正在尝试根据参数的值返回不同类型的 lambda。您的语法不正确,但这并不重要。这根本无法做到。模板不会神奇地使之成为可能。
标签: c++ templates pointers c++11 lambda