gpt4 book ai didi

c++ - 对 void* 指针进行右投

转载 作者:行者123 更新时间:2023-11-30 01:25:41 25 4
gpt4 key购买 nike

我正在尝试实现一个带有 value 字段的 C++ 类,该字段可以指向任何东西(有点像 boost::any)。目前,我执行以下操作:

class MyClass {
void* value;
template<typename T>
Myclass(const &T v) {
value = (void*)(new T(v));
}
};

现在的问题是实现一个 getValue() 操作来创建具有正确类型的内部值的拷贝:

template<typename T>
T getValue() {
return *value;
}

在这里它无法工作,因为我试图取消对 void* 指针的引用。我想知道我应该使用哪种类型转换(static_cast?dynamic_cast?其他...),以便 *value 正确转换为 T 对象,如果值最初不是这种类型,则会抛出异常?

谢谢

最佳答案

您不能取消引用 void*,它根本没有意义。为什么不使类本身通用?然后你可以:

template<typename T>
class MyClass {
T* value;

MyClass(const T& v) {
value = new T(v);
}

T getValue() {
return *value;
}
};

确保创建一个析构函数来释放 value 并遵循 The Rule of Three .您还可以创建一个返回 const T&(const 引用 T)的 getValue 版本,以避免如果不需要,请复制。

关于c++ - 对 void* 指针进行右投,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908572/

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