template <typename Type> struct testClass{
Type value;
};
int main(){
void* ptr = new testClass<int>;
ptr->value = 0;
return 0;
}
这不起作用,因为 void 指针不知道它指向什么类型,所以我必须将它转换为正确的数据类型。但是,我不确定如何为模板类执行此操作。
我试过:
(ptr<testClass>)->value = 0;
但错误提示它在“>”之前缺少模板参数。我不确定如何将其转换为 testClass(int)
最佳答案
尽管根本不需要首先使用 new
或 void
指针:void*
指向 -嗯 - void
。当用新分配的对象地址初始化指针时,类型信息会丢失。 Actor 可以检索它:
static_cast<testClass<int>*>(ptr)->value = 0;
但是,我觉得有必要再次声明您不需要 void
指针。如果您需要动态分配存储,请为指针使用确切的类型:
testClass<int>* ptr = new testClass<int>;
或者让编译器使用auto
为您推断它。
auto ptr = new testClass<int>; // ptr has type testClass<int>*
并考虑使用智能指针,例如unique_ptr
.
关于C++ 将 void 指针转换为模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015595/