我有一个将矢量转换为这样的点的函数:
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])
{
}
答案 0 :(得分:3)
std::vector
的类型不随其大小而变化;因此,使用重载方法无法做到这一点。实际上,向量的大小是运行时属性,因此无法在编译时确定,即在确定类型并执行重载解析时。
答案 1 :(得分:3)
您无法使用std::vector
执行此操作,因为矢量在运行时可调整大小;但是std::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 Point2D
或throw Point3D
。
但这不是一个好主意。