gpt4 book ai didi

c++ - 如何在 C++ 中调用默认模板函数参数?

转载 作者:行者123 更新时间:2023-12-04 00:23:28 24 4
gpt4 key购买 nike

我想要我的模板函数

template<class function>
int probe(function call = [] (int a, int b) { return a+b; })
{
return call(10, 10);
}

能够接收指向函数的指针并稍后调用此函数。这段摘录是正确的,编译器不会提示错误。让我们考虑这样的程序

#include <iostream>
#include <string>

template<class function>
int probe(function call = [] (int a, int b) { return a+b; })
{
return call(10, 10);
}

int main()
{
std::cout << probe([](int a,int b){ return a-b;});
}

程序输出我所期望的:零。但是,我为这个调用明确指出了我要传递的函数——我的意思是括号中的这个 lambda 表达式 [](int a,int b){ return a-b;} .这很好,直到我什么都没通过 - 调用 std::cout << probe();不正确,但我预计该函数将使用默认函数 function call = [] (int a, int b) { return a+b; } .那么,如何调用该函数的实例将在声明中使用默认 lambda 表达式的函数呢?

最佳答案

默认函数参数对模板参数推导没有贡献。当没有明确给出函数参数时,编译器无法推断出function,因此调用点无法匹配到任何要调用的函数。

让您的示例工作的一个非常简单的方法是重载。

template<class function>
int probe(function call)
{
return call(10, 10);
}

inline int probe()
{
return probe([] (int a, int b) { return a+b; });
}

关于c++ - 如何在 C++ 中调用默认模板函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60248048/

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