如何转发声明我将使用 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; };
仅此而已。
例如,以这段代码为例:
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; };
仅此而已。