c++ - 如何在模板中返回 lambda 指针?

标签 c++ templates pointers c++11 lambda

我必须创建一个模板,其返回值是指向某个 lambda 函数的指针(由模板参数确定)。

编译器反馈:

error: no matching function for call to ‘laptr(int)’

代码有什么问题?如何解决问题?

#include <iostream>

using namespace std;

template <typename T>
T laptr(int par);

int main(){
    laptr(1);
    return 0;
}

///////////

template <typename T>
T laptr(int par)
{
    if (par == 1)
    {
        int p1 = [](int a, int b)->int{return a*b; };
        return p1;
    }
    else
    {
        double p2 = [](double a, double b)->double{return a + b; };
        return p2;
    }
}

最佳答案

您可以使用 std::function 来存储 lambda 函数:

template <typename T>
std::function<T(T,T)> laptr (int par)
{
    if(par == 1)
        return [](T a, T b)->T {return a*b;};
    else
        return [](T a, T b)->T {return a+b;};
}

甚至是指向函数的指针

template <typename T>
auto laptr (int par) -> T(*)(T,T)
{
    ...
}

你可以这样使用它

auto func = laptr<double>(1);

auto result = func(8,2); // 8*2=16

关于c++ - 如何在模板中返回 lambda 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19935155/

相关文章:

c++ - 为 ardor boost "too old"并且不会安装

c++ - 如何在 STL 算法中使用模板函数作为比较器 ex : make_heap

c++ - 允许非 const 在包装器模板中转换为 const

c++ - 模板类复制构造函数

c - 使用指针逐字打印

c - 释放 2 个具有相同地址的指针

c++ - C++ 中的删除运算符是否需要正确的类型?

C++ 无法从文件中读取 UTF-8 西里尔文本

java - C中是否有与指针函数类似的java ByteBuffer函数

c++ - 解压一个类型列表