typedef类的前向声明

时间:2015-04-06 12:26:33

标签: c++ typedef

例如,我们有一些带有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'

2 个答案:

答案 0 :(得分:4)

是的,它应该是完全可能的,因为shared_ptr被设计为指针的安全版本,并且允许指向不完整类型的指针(就像引用一样)。

所以是的,您可以删除此依赖项并使用简单的前向声明替换Foo的主体(或包含其标头):

class Foo;
typedef shared_ptr<Foo> FooPtr;

答案 1 :(得分:4)

您无法转发声明typedef

但是你可以用Foo的前瞻声明来声明它。

class Foo;
typedef shared_ptr<Foo> FooPtr;