我正在使用std::shared_ptr<T>
很多不同的类型。由于我想将所有这些不同shared_ptr
的 s 存储在一个向量中,因此我认为必要时可以使用std::vector<std::shared_ptr<void> >
and 来回转换。void
我熟悉以下“裸指针”用法
#include <iostream>
void print(void* void_ptr)
{
int* int_ptr = static_cast<int*>(void_ptr);
std::cerr << *int_ptr << std::endl;
}
int main()
{
int* int_ptr = new int(4);
void* void_ptr = static_cast<void*>(int_ptr);
print(void_ptr);
delete int_ptr;
}
如果您有裸指针,这可以完美地工作g++
并且afaik这是执行此操作的正确方法。但现在我想和std::shared_ptr
s 一样。
#include <iostream>
#include <memory>
void print(std::shared_ptr<void> void_ptr)
{
std::shared_ptr<int> int_ptr = ??(void_ptr); // simple cast won't work
std::cerr << *int_ptr << std::endl;
}
int main()
{
std::shared_ptr<int> int_ptr = std::make_shared<int>(4);
std::shared_ptr<void> void_ptr = ??(int_ptr); // same problem here
print(void_ptr);
}
这甚至可能吗?我有很多不同的类型shared_ptr
,但这些类型几乎没有共同点。他们不共享基类或类似的东西(如果这是唯一的方法,我会这样做,但使用某种shared_ptr<void>
.