gpt4 book ai didi

c++ - 模板变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:23 25 4
gpt4 key购买 nike

我目前有以下非模板代码:

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。我发现我的问题似乎没有解决方案。

谢谢!

最佳答案

已经有一段时间了,但我以前在模板声明中使用过常量。我最终在我正在做的事情上转向了另一个方向,所以我也不知道它最终是否会成为你的解决方案。我认为这里的问题是任何模板化变量都必须在编译时 知道它的模板参数。

在您的示例中,Vector<3>Vector<4>是不同的类型,不能分配给同一个变量。这就是为什么 template<int DIM> static Vector<DIM> *myVariable没有任何意义;它没有可辨别的类型。

关于c++ - 模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com