在模板声明中使用min,max

时间:2013-01-22 06:40:31

标签: c++ templates

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

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

如何创建添加两个可能不同程度的多项式的“添加”功能?理想情况下它会像

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

有没有办法在c ++中执行此操作?

3 个答案:

答案 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)

使用算法标题中的std::minstd::max

#include <algorithm>

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