1

次のようなテンプレートによって次数が制御される多項式クラスがあるとします。

template<int degree>
class Polynomial {
....
}

次数が異なる可能性のある2つの多項式を追加するAdd関数を作成するにはどうすればよいですか?理想的には次のようなものになります

template<int degree1, int degree2>
Polynomial<max(degree1, degree2)> Add(Polynomial<degree1> poly1, Polynomial<degree2> poly2)
{
...
}

C ++でこれを行う方法はありますか?

4

3 に答える 3

2

constexprC ++ 11では、このための関数を使用できます。

constexpr int max(int n1, int n2)
{ return (n1>n2?n1:n2); }

template <int N1, int N2>
Polynomial<max(N1,N2)> add(const Polynomial<N1> &p1, const Polynomial<N2> &p2)
{ return /*...*/ }

C ++ 11より前では、constexpr関数の概念はありませんが、三項条件演算子は引き続き直接使用できます。

template <int N1, int N2>
Polynomial<(N1>N2?N1:N2)> add(const Polynomial<N1> &p1, const Polynomial<N2> &p2)
{ return /*...*/ }
于 2013-01-22T06:52:16.050 に答える
1
template<int degree>
class Polynomial{
...
};

template<int degree1, int degree2>
Polynomial<(degree1<degree2)?degree2:degree1>
Add(Polynomial<degree1> poly1, Polynomial<degree2> poly2)
{
...
}
于 2013-01-22T06:52:09.493 に答える
0

アルゴリズムヘッダーを使用するstd::minstd::max、アルゴリズムヘッダーから:

#include <algorithm>

template<int degree1, int degree2>
Polynomial<std::max(degree1, degree2)> Add(Polynomial<degree1> poly1, Polynomial<degree2> poly2)
{
    // ...
}
于 2013-01-22T16:24:43.453 に答える