例如,我们有一些带有ptr typedef
ed
class Foo
{
....
};
typedef shared_ptr<Foo> FooPtr;
是否可以转发声明FooPtr
?目的是避免将标题包含在FooPtr
定义中。
更新1 我试过的代码 的 another.h
class FooPtr;
calss A
{
.....
FooPtr m_pFoo;
.....
}
编译错误
Foo.h: error C2371: 'FooPtr' : redefinition; different basic types
1> another.h(7) : see declaration of 'FooPtr'
答案 0 :(得分:4)
是的,它应该是完全可能的,因为shared_ptr
被设计为指针的安全版本,并且允许指向不完整类型的指针(就像引用一样)。
所以是的,您可以删除此依赖项并使用简单的前向声明替换Foo
的主体(或包含其标头):
class Foo;
typedef shared_ptr<Foo> FooPtr;
答案 1 :(得分:4)
您无法转发声明typedef
。
但是你可以用Foo
的前瞻声明来声明它。
class Foo;
typedef shared_ptr<Foo> FooPtr;