lambda函数在variadic模板中

Lambda function in variadic template

本文关键字:variadic 函数 lambda      更新时间:2023-10-16

我试图通过使用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)...);
}

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

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);
}

如何跳过lambda并写作:

template <typename T>
const T& maximum ( const T& t ) { return t; }
template <typename T, typename... Args>
const T& maximum ( const T& t, Args... args ) {
    return std::max ( t, maximum ( std::forward<Args>(args)... ));
    }