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