Edit: This is not a duplicate of the linked question since I am using explicit instantiation and only a specific type of member functions do not link (others do
You should use the explicit instantion of the method template
(for all possible pairs of T
and U
) in addition to the explicit instantion of the Vector
class:
template Vector Vector::operator+(const Vector & other) const;
Also you may simply move the definition of the Vector
method to the header file.
In C++11 the extern template
directive was introduced. You may use it in the header file for Vector
class (as @StoryTeller suggested in the comments):
extern template struct Vector;
...to prevent the compiler from instantiating the Vector
class in every translation unit its specializations are used. Of course the same extern template
directives may also be used for all Vector
specializations explicitly instantiated in the .cpp
file.