我試圖通過使用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);
所有其他的事情都是平等的,最後兩個片段之間的最終區別是'[] {return 0; }'和'0'。你能理解這兩者之間的區別嗎? –