lambda函数在variadic模板中
Lambda function in variadic template
我试图通过使用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)... ));
}
相关文章:
- 限制variadic模板类中的构造函数访问
- variadic函数模板:基于n编译时值在运行时间自动n输入
- variadic函数和折叠表达:试图在Visual Studio 2017中编译时致命误差
- 将variadic函数作为参数的函数
- 类型检测:使用variadic参数正确实现计算平均值的函数
- 在variadic函数中调用SNPRINTF和VSNPRINTF
- 如何访问variadic模板函数中的参数
- 示例自定义共享_ptr-我如何传递构造函数参数 - 我在此处使用variadic模板
- C 11和类构造函数中的variadic模板
- 如何使用variadic模板参数使模板函数调用
- VS2015上的Variadic模板中找不到过载的成员函数
- variadic函数模板的参数被作为模板非类型传递
- 空包的函数variadic模板包扩展在Clang 和G 中给出了不同的结果
- 采用数组类型的variadic函数
- 如何使用std:字符串参数迭代variadic函数
- 如何在不使用模板的情况下将variadic函数与字符串一起使用
- 从variadic函数返回格式化字符串
- 如果使用va_list将args从一个variadic函数传递给另一个函数,那么如何调用va_start(没有错误)
- variadic函数-如何确保参数正确传递
- Variadic函数在VC2010中失败,并在gcc中崩溃