Синтаксис C ++ для шаблонной специализации шаблонного метода - PullRequest
0 голосов
/ 20 марта 2019

Довольно новый для работы с шаблонами в C ++. Я хочу создать шаблонную специализацию функции класса в зависимости от того, передан ли в функцию указатель одного объекта или std :: vector указателей объекта. Я хочу, чтобы std :: vector передавался по ссылке. Я не могу понять необходимый синтаксис:

StateEvolver.h

#ifndef STATEEVOLVER_H
#define STATEEVOLVER_H

#include "Vehicle.hh"

class stateevolver
{
public:
    stateevolver();
    template<typename T> void evolveState(T, double time);
};

// Template specialization declarations for functions using either std::vector<vehicle*> or single vehicle pointer

template<>
void stateevolver::evolveState<std::vector<vehicle*>&>(std::vector<vehicle*> & , double time);

template<>
void stateevolver::evolveState<vehicle*>(vehicle*, double time);


#endif

StateEvolver.cpp

template<>
void stateevolver::evolveState<std::vector<vehicle*>&>(std::vector<vehicle*> & vehicleVec, double time) {
}

Я создаю это в другом файле, например:

MyStateEvolver.evolveState(vectorOfVehiclePointers, time); // COMPILE ERROR

и получите эту ошибку времени компиляции:

undefined reference to `void stateevolver::evolveState<std::vector<vehicle*, std::allocator<vehicle*> > >(std::vector<vehicle*, std::allocator<vehicle*> >, double)'

Есть идеи, где я иду не так? Спасибо.

...