gpt4 book ai didi

c++ - 可变参数模板中的 Lambda 函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:19 25 4
gpt4 key购买 nike

我试图通过使用 Lambda 或以某种方式转发参数来摆脱重载函数,但它甚至无法编译。为什么我不能这样做?有哪些替代方案?

我真的一点都不想用重载功能。我知道我在做什么是错的,但必须有办法吗?

int maximum(int n)   //Trying to not have to use this.. I want to get rid of this :l
{
return n;
}


template<typename... Args>
int maximum(int n, Args... args)
{
return std::max(n, [&args...](int n){return n;}); //tried using a lambda instead of maximum(args...);
}

我也试过:

template<typename... Args>
int maximum(int n, Args... args)
{
return std::max(n, std::forward<Args>(args)...);
}

另外,为什么是(不编译):

template<typename... Args>
int maximum(int n, Args... args)
{
return std::max(n, []{return 0;});
}

不同于(编译):

template<typename... Args>
int maximum(int n, Args... args)
{
return std::max(n, 0);
}

第一个不编译,但第二个肯定可以..:S

我使用以上所有内容,例如:std::cout<<maximum(1, 2, 3, 7, 2, 5);

最佳答案

以下作品:

template<typename... Args>
int maximum(Args&&... args)
{
return std::max({std::forward<Args>(args)...});
}

int main()
{
std::cout << maximum(1, 2, 3, 4, 5);
}

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

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