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

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

例如,以这段代码为例:

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

这不会编译,因为当 typedef 被命中时 Foo 已经是一个类型。但是,我认为它显示了我的用例;我有周期性依赖关系,需要一个来满足另一个,但(目前)其中一件事是 typedef。我不想写类似

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

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

我如何转发声明我用 typedef 定义的类型? 或者,我如何解决我的循环依赖问题 没有 使用上述解决方案之一?有可能吗?

请注意,我不是在问 "How can I typedef with a type that hasn't been declared yet"。我在问 "How can I use typedef to define a previously-declared type".

转而声明 class:

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; };

仅此而已。