所以我这样做:
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*>
然后当你想放一个 B
或 C
在里面,你可以这样做:
std::vector<A*> vec;
vec.push_back(b);
这将比您目前正在做的任何事情都要好得多。
此外,您应该使用 std::unique_ptr
或 std::shared_ptr
,取决于指针的所有权语义。拥有原始指针是禁忌!!
关于c++ - 使用 *void 作为 static_cast 的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831431/