簡體   English   中英

將lambda表達式傳遞給模板函數時的編譯錯誤

[英]Compilation error on passing lambda expression to template function

為什么我不能讓模板函數接受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; } );
}

我得到以下錯誤;

$ 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&)

我在linux上使用g ++ 4.6.3和4.7.2

有沒有人知道我要做什么來將lambda表達式作為參數傳遞給接收模板函數? - 我不想使用std :: function - 所以我唯一的選擇是創建一個丑陋的仿函數模式。

更新:嘗試聲明參數const F&lam,但沒有成功。 Update2:添加了對編譯器的調用...

由於lambda不是左值,你需要通過const引用傳遞它:

template <typename F> int proc(const F& lam)

確保將-std = c ++ 11與g ++ 4.7.2或-std = c ++ 0x與g ++ 4.6.3一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM