为什么我不能在这里将 lambda 转换为 std::function?

why can't I convert a lambda to a std::function here?

我需要一个可以生成其他函数的函数。为什么以下不让我将 lambda 转换为 std::function?我以前做过。

#include <iostream>
#include <functional>

std::function<int()> funcGen(int param) {
    std::function<int()> myGeneratedFunc = 
    [param](int input) -> int { 
        return input+param;
    };
    return myGeneratedFunc;
}

int main() {

    std::function<int()> myFunc = funcGen(3);
    std::cout << "this should be 4=3+1: " << myFunc(1) << "\n";

    return 0;
}

ideone 我收到以下错误:

error: conversion from ‘funcGen(int)::<lambda(int)>’ to non-scalar type ‘std::function<int()>’ requested

std::function<int()> 接受一个不接受参数的函数和 returns 一个 int。您建议的 lambda 接受一个 int 和 returns 一个 int.

改为考虑 std::function<int(int)>

#include <iostream>
#include <functional>

std::function<int(int)> funcGen(int param) {
    std::function<int(int)> myGeneratedFunc = 
    [param](int input) -> int { 
        return input+param;
    };
    return myGeneratedFunc;
}

int main() {

    std::function<int(int)> myFunc = funcGen(3);
    std::cout << "this should be 4=3+1: " << myFunc(1) << "\n";

    return 0;
}