假设我有一个多项式类,其中度由模板控制,如下所示:
template<int degree>
class Polynomial {
....
}
如何创建添加两个可能不同程度的多项式的“添加”功能?理想情况下它会像
template<int degree1, int degree2>
Polynomial<max(degree1, degree2)> Add(Polynomial<degree1> poly1, Polynomial<degree2> poly2)
{
...
}
有没有办法在c ++中执行此操作?
答案 0 :(得分:2)
在C ++ 11中,您可以使用constexpr
函数:
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 /*...*/ }
答案 1 :(得分:1)
template<int degree>
class Polynomial{
...
};
template<int degree1, int degree2>
Polynomial<(degree1<degree2)?degree2:degree1>
Add(Polynomial<degree1> poly1, Polynomial<degree2> poly2)
{
...
}
答案 2 :(得分:0)