variadic模板中的lambda函数

我试图通过使用Lambda或转发参数一些如何但它甚至不编译来摆脱重载函数。为什么我不能这样做?还有什么替代方法?variadic模板中的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);

}

回答:

如何跳过拉姆达,只是写:

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

}

以上是 variadic模板中的lambda函数 的全部内容, 来源链接: utcz.com/qa/262921.html

回到顶部