2

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

4

2 に答える 2

2

次の作品:

template<typename... Args>
int maximum(Args&&... args)
{
    return std::max({std::forward<Args>(args)...});
}

int main()
{
    std::cout << maximum(1, 2, 3, 4, 5);
}
于 2012-12-20T03:15:17.177 に答える
1

ラムダをスキップして、ただ書くのはどうですか?

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)... ));
    }
于 2012-12-20T03:09:24.433 に答える