C ++:按矢量大小重载函数

时间:2014-10-23 16:32:23

标签: c++ function vector arguments size

我有一个将矢量转换为这样的点的函数:

Point2D<T> VectorToPoint(std::vector<T> &vec)
{
}

Point3D<T> VectorToPoint(std::vector<T> &vec)
{
}

显然,这不会编译。我想重载它,以便我可以根据矢量大小返回正确的点类型。使用数组很容易,如下所示。我可以用矢量吗?

Point2D<T> ArrayToPoint(T (&arr)[2])
{
}

Point3D<T> ArrayToPoint(T (&arr)[3])
{
}

3 个答案:

答案 0 :(得分:3)

std::vector的类型不随其大小而变化;因此,使用重载方法无法做到这一点。实际上,向量的大小是运行时属性,因此无法在编译时确定,即在确定类型并执行重载解析时。

答案 1 :(得分:3)

您无法使用std::vector执行此操作,因为矢量在运行时可调整大小;但是std::array应该可以使用,它具有固定的大小。

http://en.cppreference.com/w/cpp/container/array

答案 2 :(得分:2)

我开玩笑,但对于那些说不能做的人(tm) -

try{
   VectorToPoint( pointVector );
}catch(Point3D point){
   // Deal with this kind of point
}catch(Point2D point){
  // And this other kind of point
}   

根据向量的大小,您的函数需要throw Point2Dthrow Point3D

但这不是一个好主意。