我想創建一個既接受函數指針又接受lambda表達式的函數。函數的返回類型應該與函數指針/ lambda表達式的返回類型相同。返回與作爲參數傳遞的lambda表達式相同的類型
以下是一個按預期工作的函數的最小示例,但僅適用於函數指針。我可以使用模板來接受lambda表達式嗎?
template <typename R>
R foo(R (*func)())
{
return func();
}
兩個函數指針和lambda表達式下面的作品,但只接受bool
。
bool foo(std::function<bool()> func)
{
return func();
}
bool a = foo([](){ return true; });
我試圖使它通用使用的模板,但我得到一個編譯錯誤,當它被稱爲(不匹配功能)
template <typename R>
R foo(std::function<R()> func)
{
return func();
}
bool a = foo([](){ return true; });
lambda表達式沒有捕捉可以轉化爲函數指針 – sp2danny
@ sp2danny:是的,但前提是你必須爲轉換的上下文。這裏的第一個問題是你不知道它將要轉換的函數指針類型。 – MSalters