gpt4 book ai didi

c++ - 模板函数中的默认 lambda 参数

转载 作者:行者123 更新时间:2023-12-03 15:53:44 26 4
gpt4 key购买 nike

我想在模板函数中默认一个 lambda 参数,但它无法编译。我错过了什么?

template <typename F>
void foo(
F f = [](){
std::cout << "Hello!\n";
}
) {
f();
}

int main() {
foo(); // 1. does not compile

foo([](){ // 2. this is ok
std::cout << "Hello!\n";
});
}

最佳答案

您无法从默认函数参数推导出函数的模板参数。看到这个 question有关为何实现此限制的详细信息。
所以你必须自己提供一个默认的模板参数。由于您需要 lambda 的类型和值,因此一个简单的方法是编写一次 lambda,然后在函数模板中使用它。

auto lambda = []() 
{
std::cout << "Bye!\n";
};

template <typename F = decltype(lambda)> // default parameter
void foo(F f = lambda) // default value
{
f();
}
这是一个 demo

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

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