Я пытаюсь добавить функциональность шаблона в мой векторный класс, после того, как уже использовал его без шаблонов в моем проекте.
Старая версия использовала жестко закодированный float
для сохранения значений для x
, y
и z
.Сейчас я пытаюсь сделать так, чтобы класс также мог использовать double через шаблон.
Мое определение класса выглядит следующим образом:
namespace alg {
template <class T=float> // <- note the default type specification
struct vector
{
T x, y, z;
vector() : x(0), y(0), z(0) {}
explicit vector(T f) : x(f), y(f), z(f) {}
vector(T x, T y, T z) : x(x), y(y), z(z) {}
// etc
};
}
Я надеялся теперь бытьсмог скомпилировать мой проект без внесения изменений в код, указав шаблону использовать float
по умолчанию, если не задан параметр шаблона.
Однако я все еще получаю ошибки об отсутствующих аргументах шаблона...
#include "vector.hpp"
int main() {
alg::vector a;
return 0;
}
-
$ g++ -O3 -Wall -Wextra -std=gnu++0x test.cpp
test.cpp: In function ‘int main()’:
test.cpp:4:17: error: missing template arguments before ‘a’
test.cpp:4:17: error: expected ‘;’ before ‘a’
Как заставить этот код работать без изменения test.cpp
?Желательно без указания названия struct
и использования typedef