gpt4 book ai didi

当不确定类型是什么时,C++ cast void*

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

当我不确定另一种类型是什么时,如何在 C++ 中将 void* 转换为另一种类型。这是我的代码示例:

class A
{
};
class B
{
};
void main()
{
void * p;
if (rand() % 2)
p = new A();
else
p = new B();

A * a = NULL;
B * b = NULL;
}

如果它的类型是 A*,我想要一个代码将指针 p 转换为 A*,并将答案放在 a 中,如果指针 p 的类型是 B*,则将指针 p 转换为 B*,并将答案放入 b。

我尝试了 static_cast 和常规转换,但它们都在不进行运行时检查的情况下以任何方式进行转换,即使转换不正确,它们也不会抛出异常。

最佳答案

如果您的类是多态的,那么您可以依靠typeidtypeinfo 提供的工具(尽管您最喜欢使用虚函数经常)。否则没有简单的方法可以做到这一点。

如果您想以任何方式做到这一点,那么您需要复制该功能。例如:-

template<typename T>
class TypeStoringBase
{
private:
enum Type { CLASS_A, CLASS_B, CLASS_C ...};
protected:
~TypeStoringBase();
public:
...
};

然后从此类中派生出每个类(使用私有(private)继承),您希望在转换时确保其正确性。

关于当不确定类型是什么时,C++ cast void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903739/

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