Довольно новый для работы с шаблонами в 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)'
Есть идеи, где я иду не так? Спасибо.