C++ 将 void 指针转换为模板类

标签 c++ templates casting

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)

最佳答案

尽管根本不需要首先使用 newvoid 指针: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/

相关文章:

javascript - 使用 Masterpage 的 AltTemplate 嵌套模板 - Umbraco

java , jpa 强制转换异常

c++ - C++ makefile 的 Netbeans 环境变量

c++ - 警告 C5246 : the initialization of a subobject should be wrapped in braces

python - 使用模板中 url 中的查询参数,如 "?name="

C++ 对函数的引用在调用中崩溃

c - 往返指针类型转换对准

iphone - 如何从 as 和 id 传入的整数获取 NSDate?

c++ - 是否可以在 C++ 中使用 lambda 代替类?

c++ - const 是否在编译时双重转换?