【问题标题】:why can't I convert a lambda to a std::function here?为什么我不能在这里将 lambda 转换为 std::function?
【发布时间】:2021-04-06 23:36:48
【问题描述】:

我需要一个生成其他函数的函数。为什么以下不让我将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

【问题讨论】:

  • 在哪一行?来自 main 还是来自函数?

标签: c++ lambda std-function


【解决方案1】:

std::function&lt;int()&gt; 接受一个不接受任何参数并返回 int 的函数。您建议的 lambda 接受 int 并返回 int

请考虑std::function&lt;int(int)&gt;

#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;
}

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多