c++ - 使用 *void 作为 static_cast 的缓冲区

标签 c++ void-pointers downcast

所以我这样做:

class A;

class B : public A;

class C : public B;

vector<A*> *vecA;

vector<C*> *vecC;

我想将 vectC 转换为 vecA。

vector<A*> *_newA = static_cast< vector<A*>* >(vecC); //gives an error

所以我使用 void 指针作为缓冲区和强制转换:

void *buffer = vecC;

vector<A*> *_newA = static_cast< vector<A*>* >(buffer); //works

这有效吗?还有其他方法吗?

最佳答案

你应该只有一个 std::vector<A*>然后当你想放一个 BC在里面,你可以这样做:

 std::vector<A*> vec;
 vec.push_back(b);

这将比您目前正在做的任何事情都要好得多。

此外,您应该使用 std::unique_ptrstd::shared_ptr ,取决于指针的所有权语义。拥有原始指针是禁忌!!

关于c++ - 使用 *void 作为 static_cast 的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831431/

相关文章:

c++ - C++ 中的显式类型转换

c - 使用 void 的通用交换尝试**

c - 如何通过 C 中的套接字发送和接收内存地址?

c++ - 私有(private)范围内私有(private)继承的动态向下转换

c# - 派生类中引入的公共(public)接口(interface)

c++ - 为什么涉及虚拟继承时不能使用static_cast进行向下转换?

c++ - 更改范围的字符格式

c++ - 从 XML 文件中检索 CString 文件路径

C++ 变暖标准 vector

c++ - 无法强制 clang CompilerInstance 对象将 header 解析为 C++ 文件