如何处理模板类的向量?

时间:2014-07-16 23:51:05

标签: c++ templates vector stl

我正在开发一个快速排序功能,可以对从模板创建的对象矢量进行排序。特别是 n 维度空间上的点向量。这是我的Point模板:

#ifndef POINT_H   
#define POINT_H   
template <int dimention, typename type>   
class Point{
public:
    Point(){mCoords = new type[dimention];}
    Point(type* pCoords);
    int getDimention(){return dimention;}
// Operators
//-----------

这是quicksort功能(我还没有编写实际的实现,因为我希望首先解决这个问题):

#ifndef QUICK_S
#define QUICK_S
#include <vector>
#include "point.h"

// Generic quicksort function that works with points of any dimention
std::vector<Point<int dimention, typename type> > 
quicksort(std::vector<Point<int dimention, typename type> > unsorted)
{
// implementation --------------

我得到的错误(其中一些):

In file included from convexHull.cpp:4:0:
quicksort.h:7:47: error: wrong number of template arguments (1, should be 2)

In file included from quicksort.h:4:0,
             from convexHull.cpp:4:
point.h:5:7: error: provided for ‘template<int dimention, class type> class Point’
 class Point{

In file included from convexHull.cpp:4:0:
quicksort.h:7:49: error: template argument 1 is invalid
std::vector<Point<int dimention, typename type> >

如果你能指出我错在哪里,欢迎任何提示或想法,我会很感激,我是一个自学成才的程序员。感谢。

2 个答案:

答案 0 :(得分:2)

由于quicksort可以对vector<Point<int dimention, typename type> >dimention的任何值type进行操作,因此它是模板函数,必须声明为:

template<int dimention, typename type>
std::vector<Point<dimention, type> > 
quicksort(std::vector<Point<dimention, type> > unsorted)

另请注意,此处删除int中的typenamePoint<dimention, type>

答案 1 :(得分:0)

你的快速排序定义应该只声明它的模板:

std::vector<typename type> 
quicksort(std::vector<type> unsorted)
{
// implementation --------------

无论何时调用quicksort,都可以为特定的Point设置添加模板:

quicksort<Point<1,float> >(pointList);

根据Mooing Duck的评论,在这种情况下,您不需要提供模板类型,因为它可以由编译器推断:

quicksort(pointList);

应该就是您所需要的一切。