gpt4 book ai didi

c++ - 如何从不透明指针 typedef 创建 shared_ptr? (或 : how can I "unwrap" typedef? )

转载 作者:IT老高 更新时间:2023-10-28 22:24:53 28 4
gpt4 key购买 nike

如果你有一个不透明的指针 typedef,有没有办法动态引用指向的类型,比如说,在模板中使用?例如,假设你有这样的事情:

struct Foo; // Forward declared struct
typedef Foo* FooPtr; // Opaque pointer

因为智能指针类型在指针类型方面是模板,所以定义一个 std::shared_ptr这其中,似乎不得不说:

std::shared_ptr<struct Foo> theSharedPtr;

有没有办法在不“手动”解开不透明指针 typedef 的情况下定义这样的指针?我觉得我必须在这里遗漏一些明显的东西,但你可能会想到这样的事情(注意:这些不起作用):

std::shared_ptr<*FooPtr> theSharedPointer;
// or
std::shared_ptr<pointedto(FooPtr)> theSharedPointer;

我觉得这应该是可能的。我错过了什么吗?我觉得这是一个即将到来的额头拍打时刻......

编辑:再多考虑一些,似乎在常见情况下,shared_ptr<T>想拍sizeof(T) .您可以通过向构造函数提供删除器来解决此问题。我怀疑这会使这有点边缘情况,但看起来仍然像 C++ 中的所有类型争吵,我应该能够“解包”指针类型而无需手动这样做。

最佳答案

在 C++11 中:

#include <type_traits>

typedef std::shared_ptr< std::remove_pointer< FooPtr >::type > theSharedPtr;

在 C++03 中,您可以以完全相同的方式使用 boost::remove_pointer

如果你不想包含 boost,编写一个 remove_pointer 元函数非常简单:

template<class T> struct remove_pointer;
template<class T> struct remove_pointer<T*> { typedef T type; };

关于c++ - 如何从不透明指针 typedef 创建 shared_ptr? (或 : how can I "unwrap" typedef? ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839060/

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