我想编写一个管理欧几里得 vector 的类,并使用short,int,long或float来存储其初始点。我想创建一个像这样的模板:

    template<class unit> class EVector
{
private:
    unit x;
    unit y;
public:
    EVector();
    setX();
    setY();
};

因此,用户创建一个EVector来选择合适的原始类型。但是如何在不同的类之间实现操作,例如
EVector<int> a;
EVector<float> b;

EVector<double> c;

c = a + b;

operator =将复制坐标,operator +将其添加。

最佳答案

另外,您可以使用 promote 实现:

template<typename A, typename B>
EVector<typename promote<A, B>::type>
operator +(EVector<A> const& a, EVector<B> const& b) {
  EVector<typename promote<A, B>::type> ev;
  ev.setX(a.getX() + b.getX());
  ev.setY(a.getY() + b.getY());
  return ev;
}

对于doubleint类型,它将产生double例如。

08-17 04:03