如何从不透明的指针typedef中创建一个shared_ptr?(或:如何“解包” typedef?)

IPCC

如果您有一个不透明的指针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; };

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

typedef数组与typedef指针

来自分类Dev

数组的typedef数组的typedef

来自分类Dev

boost.Python如何公开boost :: shared_ptr的typedef?

来自分类Dev

如何给结构一个“虚拟” typedef?

来自分类Dev

typedef结构中的指针

来自分类Dev

Typedef语句

来自分类Dev

模板typedef?

来自分类Dev

如何递归使用typedef?

来自分类Dev

如何从TypeSpec获取TypeDef

来自分类Dev

如何在C#中创建“指向函数指针的typedef”?

来自分类Dev

不透明结构的C typedef编码样式

来自分类Dev

特征中的Typedef与类中的Typedef

来自分类Dev

使用指针变量typedef

来自分类Dev

使用指针变量typedef

来自分类Dev

Typedef结构混乱中的指针

来自分类Dev

类模板中的Typedef指针

来自分类Dev

Typedef结构体指向另一个typedef结构体的指针

来自分类Dev

Java中的C ++ typedef?

来自分类Dev

C ++中复杂的Typedef

来自分类Dev

Scala中的Typedef

来自分类Dev

Scala中的Typedef

来自分类Dev

了解c中的typedef

来自分类Dev

声明一个返回结构指针的函数的typedef?

来自分类Dev

如何使用typedef声明函数指针

来自分类Dev

没有typedef的函数指针如何转换?

来自分类Dev

如何实例化const typedef指针?

来自分类Dev

Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

来自分类Dev

Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

来自分类Dev

适当使用typedef以避免“ typedef污染”