Use*_*ser 3 c++ include forward-declaration
我发现这个问题什么时候使用前向声明?这是有用的,但它是描述性的而不是规定性的.
我的场景通常是我使用指向另一个类的指针作为类成员或函数参数,所以我在标题中需要的只是一个前向声明(另外,如果我切换到使用boost shared_ptr,它们将是与使用前向声明兼容?).目前我只是包括标题,但现在我想知道我是否应该使用前向声明.
所以我的问题是,如果我可以使用前瞻性声明,我应该吗?我希望这个问题不是主观的,但如果没有最佳实践答案,那么使用前瞻性声明的利弊是什么?
UPDATE
只是为了扩展shared_ptr问题(我现在没有使用它们,而是考虑切换).如果我要使用它们,我想我会在类中使用typedef的shared_ptr类型.例如:
class Customer
{
public:
typedef std::tr1::shared_ptr<Customer> SharedPointer;
Customer() {}
virtual ~Customer() {}
virtual std::string GetName() const;
};
Run Code Online (Sandbox Code Playgroud)
似乎这可能会使事情变得更加混乱.这会对前向声明产生问题,如果是这样,有一个简单的解决方法吗?
您可能希望这样做,因为包含文件会使编译时间更长,但根据您拥有的案例数量和代码库的大小,它很可能不会成为问题.
另一件需要考虑的事情是依赖关系.您不希望重新编译所有代码,因为您更改了包含文件,而您只需要指针定义.
所以我的(主观)答案是肯定的,你应该.