我正在开发一个快速排序功能,可以对从模板创建的对象矢量进行排序。特别是 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> >
如果你能指出我错在哪里,欢迎任何提示或想法,我会很感激,我是一个自学成才的程序员。感谢。
答案 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
中的typename
和Point<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);
应该就是您所需要的一切。