[英]Forward declare a class's public typedef in c++
我正在尝试通过使用前向声明并将#includes移动到实现文件中来简化一堆头文件“include spaghetti”。 但是,我继续遇到以下情况:
//Foo.h
#include "Bar.h"
class Foo
{
public:
void someMethod(Bar::someType_t &val);
};
//Bar.h
.
.
.
class Bar
{
public:
typedef std::vector<SomeClass> someType_t;
};
我希望在尽可能多的情况下删除#include“Bar.h”。 我还看到Bar.h中的typedef列在Bar类之外的情况。 我假设两种情况都可以用同样的方式解决。
有任何想法吗?
不幸的是,你没有很多选择,没有一个是完美的。
首先,两个明显且不可接受的解决方案:
typedef
,这完全违背了使用typedef
的目的。 typedef
的文件,您要避免使用该文件。 更有趣的解决方案:
typedef
包含在内并包含该文件。 这会创建类之间的代码耦合。 你应该只用相关的类来做到这一点,否则你将最终得到一个神包含文件,当你向该文件添加一个typedef
时,这可能会导致大量的重新编译。 typedef
。 有点讨厌,但它的确有效。 最后两个就像做前向声明但添加了typedef
。 它们减少了文件的相互依赖性,因为您很少修改typedef文件。
我会说在大多数情况下,中心包含的麻烦最有利。 小心点
只需使用class Bar;
。 这告诉C ++你宣布你有意定义Bar。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.