1

假设我有一个多项式类,其中度数由模板控制,例如:

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

如何创建一个添加函数来添加两个可能不同程度的多项式?理想情况下,它会像

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

有没有办法在 C++ 中做到这一点?

4

3 回答 3

2

constexpr在 C++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 回答