我目前拥有以下非模板化的代码:
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。我看不出有解决我的问题的方法。
谢谢!
void*
看起来更有意义,但无论如何你都需要进行强制类型转换才能使用它...我认为可能需要使用dynamic_cast
,但我不确定。我认为采用不同的方法可能会更好,只是没有更多信息很难说哪种方法更好。 - Keith Layne