2

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

4

2 回答 2

2

以下作品:

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

int main()
{
    std::cout << maximum(1, 2, 3, 4, 5);
}
于 2012-12-20T03:15:17.177 回答
1

如何跳过 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)... ));
    }
于 2012-12-20T03:09:24.433 回答