У меня есть векторный класс, в котором есть некоторые статические переменные типа const, например ZERO
. Теперь, поскольку vector часто реализуется как шаблонный класс (и мой не является исключением), я вижу много этого кода:
template<> const Vector2<float> Vector2<float>::ZERO;
template<> const Vector2<float> Vector2<float>::UNIT_X(1, 0);
//... and so on, and then all code duplicated for other types (int, double, long double)
// including different sizes of the Vector (Vector2, Vector3, Vector4)
У меня вопрос, могу ли я сделать что-то подобное, чтобы избежать дублирования кода только для другого типа:
template <typename T, unsigned int SIZE>
const Vector<T, SIZE> Vector<T, SIZE>::ZERO;
Может ли это удовлетворить все будущие типы? Если нет, будет ли иметь значение, если я добавлю следующее, чтобы явно определить классы для различных типов:
template Vector<float, 2>;
template Vector<float, 3>;
До сих пор я тестировал его на Visual C ++ (2008), и он прекрасно компилируется и тесты проходят, но мне интересно, если это нестандартный код.