如何转发声明要使用 typedef 创建的类型?

How can I forward declare a type I'm going to create with typedef?

本文关键字:typedef 创建 类型 何转发 转发 声明      更新时间:2023-10-16

例如:

class Foo;
class Something {
    Foo *thing;
};
typedef std::vector<Something> Foo;

不能编译,因为当点击typedef时,Foo已经是一个类型了。然而,我认为它展示了我的用例;我有周期性依赖关系,需要一个来满足另一个,但(目前)其中一个是类型定义的。我不喜欢写像

这样的东西
class Foo {
    std::vector<Something> inside;
}

因为我需要记住每个my_foo.inside.some_method()中的inside。我也想避免围绕std::vector<Something>编写包装器,因为它会有很多样板文件。

如何转发声明我用typedef定义的类型?或者,我如何解决我的周期性依赖问题而不使用上面的解决方案之一 ?这可能吗?

请注意,我不是在问"我如何使用尚未声明的类型typedef"。我的问题是"如何使用typedef来定义先前声明的类型"。

代替前向声明类:

class Something;
typedef std::vector<Something> Foo;
class Something { Foo *thing; };

如果您使用的是c++ 11或更高版本,请使用using声明代替typedef:

class Something;
using Foo = std::vector<Something>;
class Something { Foo *thing; };