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);
}
最初のものはコンパイルされませんが、2番目のものは確かにコンパイルされます..:S
私は上記のすべてを次のように使用します:std::cout<<maximum(1, 2, 3, 7, 2, 5);