Как обработать вектор шаблона класса?

Я работаю над функцией быстрой сортировки, которая сортирует вектор объектов, созданных из шаблона. В частности, вектор точек на 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
//-----------

Это функция быстрой сортировки (я не написал реальную реализацию, потому что сначала хочу решить эту проблему):

#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> >

Буду признателен, если вы укажете, где я ошибаюсь, приветствуются любые советы или идеи, я программист-самоучка. Благодарю.

1

Решение

Так как 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> удаляются здесь.

2

Другие решения

Ваше определение быстрой сортировки должно просто объявить свой шаблон следующим образом:

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

всякий раз, когда вы вызываете быструю сортировку, вы добавляете шаблон для вашей конкретной настройки Point:

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

Согласно комментарию Mooing Duck, в этом случае вам не нужно указывать тип вашего шаблона, так как он может быть определен компилятором:

quicksort(pointList);

должно быть все, что вам нужно.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector