并转换到void如有必要-6ren">
gpt4 book ai didi

c++ - 类似于 std::shared_ptr 中的 "cast from/to void"

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:12 25 4
gpt4 key购买 nike

我正在使用 std::shared_ptr<T>对于很多不同的类型。因为我想存储所有这些不同的 shared_ptr在一个 vector 中,我认为有一个 std::vector<std::shared_ptr<void> >并转换到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 一样

#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> 肯定会更棒)。

最佳答案

std::static_pointer_cast 执行此功能。然而,这通常是一个非常糟糕的想法——为什么不使用 boost::anyboost::variant 之类的东西呢?这种弱类型和弱执行的代码只会咬你的屁股。

关于c++ - 类似于 std::shared_ptr 中的 "cast from/to void",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12441411/

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