gpt4 book ai didi

c++ - 将 Type** 转换为 void* 然后返回到 Type*

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:44 27 4
gpt4 key购买 nike

我在转换方面遇到问题。

A 类有一个公共(public)方法:char* m()

funcA 接收到类型 A 的双指针并将其转换为空指针。在 funcB 中,我希望将其转换回类型 A 以便我可以调用方法 m()。我已经尝试了以下但惨遭失败。

void funcA(const A** a) {
funcB((void*)a)
}

void funcB(void* b) {
A* a = (A*) b; //
printf("M: %s", a->m()); // => crash!
}

如何将 void 指针转换回类型 A 以便调用该方法?

最佳答案

两种可能性:

void funcA(const A** a) {
funcB((void*)*a); // passing an A* to funcB
}

void funcB(void* b) {
A* a = (A*) b;
[...]
}

void funcA(const A** a) {
funcB((void*)a); // passing an A** to funcB
}

void funcB(void* b) {
A* a = *(A**)(b);
[...]
}

请注意,我们在 funcB 中用于转换 b 的类型必须与我们从 funcA 传入的类型相匹配。这很容易出错,因为一旦我们转换为 void*,我们就丢弃了所有类型信息,因此编译器无法在此处帮助我们。

另请注意,按照现在的编写方式,我们丢失了原始 a 上的 const 限定符。这可能是一件坏事。您可能希望改为在 funcB 中转换为 const A*

关于c++ - 将 Type** 转换为 void* 然后返回到 Type*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548969/

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