Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将lambda表达式传递给模板函数时发生编译错误_C++_C++11_Lambda - Fatal编程技术网

C++ 将lambda表达式传递给模板函数时发生编译错误

C++ 将lambda表达式传递给模板函数时发生编译错误,c++,c++11,lambda,C++,C++11,Lambda,为什么我不能让模板函数接受lambda表达式 在搜索高和低之后,我认真地认为这是可行的,但是这个C++代码; template <typename F> int proc(const F& lam) { return lam(); } void caller() { int i = 42; int j = proc( [&i]()->int{ return i/7; } ); } 模板内部程序(常量F&lam) { 返回lam(); }

为什么我不能让模板函数接受lambda表达式

在搜索高和低之后,我认真地认为这是可行的,但是这个C++代码;

template <typename F> int proc(const F& lam)
{
    return lam();
}
void caller()
{
    int i = 42;
    int j = proc( [&i]()->int{ return i/7; } );
}
模板内部程序(常量F&lam)
{
返回lam();
}
void caller()
{
int i=42;
intj=proc([&i]()->int{returni/7;});
}
我得到以下错误

$ g++ x.cc
x.cc: In function ‘void caller()’:
x.cc:11:44: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x [enabled by default]
x.cc:11:46: error: no matching function for call to ‘proc(caller()::<lambda()>)’
x.cc:11:46: note: candidate is:
x.cc:3:27: note: template<class F> int proc(const F&)
$g++x.cc
x、 cc:在函数“void caller()”中:
x、 cc:11:44:警告:lambda表达式仅在-std=c++0x或-std=gnu++0x[默认情况下启用]时可用
x、 cc:11:46:错误:调用“proc(caller():)”时没有匹配的函数
x、 抄送:11:46:注:候选人为:
x、 抄送:3:27:注:模板整型过程(常数F&)
我在linux上使用g++4.6.3和4.7.2

有人知道我必须做什么才能将lambda表达式作为参数传递给接收模板函数吗?--我不想使用std::函数,所以我唯一的选择就是创建一个丑陋的函子模式

更新:试图声明参数const F&lam,但未成功。
Update2:添加了对编译器的调用…

由于lambda不是左值,您需要通过常量引用传递它:

template <typename F> int proc(const F& lam)
模板内部程序(常量F&lam)

确保在g++4.7.2中使用-std=c++11,或在g++4.6.3中使用-std=c++0x。

不幸的是,这并没有解决问题。。x、 cc:11:46:错误:调用'proc(caller()::)'x没有匹配的函数。cc:11:46:注意:候选函数是:x.cc:3:27:注意:模板int-proc(const F&)谢谢@Vaughn--尝试剪切粘贴您的工作代码--仍然有相同的问题--怀疑这是编译器版本问题--您使用的是什么版本?@Soren:我使用的是g++4.7.2与-std=c++11与g++4.7.2一起工作,或者-std=c++0x与g++4.6.3一起工作。您将向编译器传递什么标志?无--无标志--通过调用更新问题编译器…您必须在g++4.7.2中使用-std=c++11,或在g++4.6.3中使用-std=c++0x。谢谢--这就是诀窍--现在我非常混淆“默认启用”的警告消息的含义…..请参阅