В настоящее время у меня есть следующий не шаблонный код:
class Vector{
public:
double data[3];
};
static Vector *myVariable;
void func() {
myVariable->data[0] = 0.;
}
int main() {
myVariable = new Vector();
func();
}
Затем я хочу создать шаблон для измерения:
template<int DIM> class Vector{
public:
double data[DIM];
};
static Vector<3>* myVariable;
void func() {
myVariable->data[0] = 0.;
}
int main() {
myVariable = new Vector<3>();
func();
}
Но я, наконец, хочу также шаблонизировать мою переменную с размером:
template<int DIM> class Vector{
public:
double data[DIM];
};
template<int DIM> static Vector<DIM> *myVariable;
void func() {
myVariable->data[0] = 0.;
// or perform any other operation on myVariable
}
int main() {
int dim = 3;
if (dim==3)
myVariable = new Vector<3>();
else
myVariable = new Vector<4>();
func();
}
Однако эта последняя версия кода выдает ошибку: эта статическая переменная не может быть шаблонизирована («C2998: Vector * myVariable не может быть определением шаблона»).
Как можно исправить эту ошибку без полной редизайна (например, наследовать шаблонный класс Vector от не шаблонного класса, что потребовало бы более дорогих вызовов виртуальных методов, или вручную создать несколько переменных myVariables разных измерений)? Может быть, я просто устал и не вижу очевидного ответа: s
Редактировать: обратите внимание, что этот код является минимальным рабочим кодом для отображения ошибки, но моя фактическая реализация использует шаблоны для класса полной вычислительной геометрии, поэтому я не могу просто заменить Vector на массив. Я вижу, что, похоже, нет решения моей проблемы.
Спасибо!