gpt4 book ai didi

c++ - 函数模板中的 lambda 闭包类型和默认参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:05 27 4
gpt4 key购买 nike

根据[expr.prim.lambda],以下代码似乎没问题:

#include<functional>

typedef int(*func1)(int);
typedef std::function<int(int)> func2;

int function(int)
{
return 0;
}

template<typename F = func1>
int function1(F f = function)
{
return 0;
}

template<typename F = func2>
int function2(F f = function)
{
return 0;
}

template<typename F = func1>
int function3(F f = [](int i){return 0;})
{
return 0;
}

template<typename F = func2>
int function4(F f = [](int i){return 0;})
{
return 0;
}

但是,gcc (4.8.1) 提示 function3function4 并显示错误

default argument for template parameter for class enclosing '__lambda'

有人可以解释这个错误吗?

最佳答案

我可以建议解决方法吗?

删除 function3(和 function4)的默认模板参数:

template<typename F>
int function3(F f = [](int i){return 0;})
{
return 0;
}

你可以这样调用它:

function3<func1>();

但我想你希望能够像这样调用:

function3();

不是吗?然后,创建 function3 的另一个重载,它是一个函数而不是模板函数:

int function3(func1 f = [](int i){return 0;})
{
return function3<func1>(f);
}

关于c++ - 函数模板中的 lambda 闭包类型和默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com