I am back to C++ after many, many years' absence. I'm trying to create a simple vector class (non-interesting stuff removed):

template <class T> class Vector3 { public: T length(); public: T x, y, z; };

I want to specialize the length method so that I can select the correct version of sqrt to call based on type of T. The best I can come up with is the following. "Best" is really a misnomer, since it doesn't compile. Can someone enlighten me what the best way to do this would be?

template <> void Vector3<int>::length() { return (T) sqrtl((long)(this->x * this->x) + (long)(this->y * this->y) + (long)(this->z * this->z)); } template <> void Vector3<long>::length() { return (T) sqrtl((this->x * this->x) + (this->y * this->y) + (this->z * this->z)); } template <> void Vector3<float>::length() { return (T) sqrtf((this->x * this->x) + (this->y * this->y) + (this->z * this->z)); } template <> void Vector3<double>::length() { return (T) sqrt((this->x * this->x) + (this->y * this->y) + (this->z * this->z)); } template <class T> T Vector3<T>::length() { return (T) sqrt((double)(this->x * this->x) + (double)(this->y * this->y) + (double)(this->z * this->z)); }

Thanks in advance!

Signed,

Clueless about C++