typedef类的正向声明

forward declaration of typedef class

本文关键字:声明 typedef      更新时间:2023-10-16

例如,我们有一些类的ptr typedef ed

class Foo
{
    ....
};
typedef shared_ptr<Foo> FooPtr;

是否可以转发声明FooPtr?其目的是避免将标头与FooPtr定义一起包含。

更新1我尝试过的代码
另一个.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'

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

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

class Foo;
typedef shared_ptr<Foo> FooPtr;

不能转发声明typedef

但是您可以仅通过Foo的正向声明来声明它。

class Foo;
typedef shared_ptr<Foo> FooPtr;