如果您有一个不透明的指针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] 删除。
我来说两句