以下列例子为例:
// base.h
#include <string>
struct base
{
virtual ~base() = default;
virtual void do_something(const std::string& arg) const = 0;
};
// derived.h
struct derived : base
{
void do_something(const std::string& arg) const
{
//...
}
};在这个例子中,derived.h应该包括string头吗?
我完全同意包含您所使用的内容的原则,但在这种情况下,base.h必须包括string,如果接口更改为不使用string (相应地将include <string>从base.h中删除),那么接口无论如何都会中断突出显示。
发布于 2013-07-27 06:01:59
如果接口更改为不包含string,则派生的do_something也必须更改。如果您需要在derived.h中独立于接口(例如,由于与接口无关但存在于实现中的详细信息)--在本例中,是的,在这里也包括<string>可能更好。
发布于 2013-07-27 06:00:25
我采用的方法是始终使用include,__ing,为那个文件所需要的任何东西。然后,当我在某个地方缺少一个符号时,我就不需要到处搜索标题和解开依赖关系的纠缠网了。包括警卫意味着这很便宜。
但这完全取决于你。如果您想省略它,使derived.cpp更短,并在稍后的日期添加它,如果需要的话,这也没关系。
根本没有“正确”的答案。
发布于 2013-07-27 06:00:12
你可以包括"base.h“不要认为much.The太少,你写的代码越少,代码就越好。
#include "base.h"
struct derived :public base
{
void do_something(const std::string& arg) const
{
//...
}
};https://stackoverflow.com/questions/17894725
复制相似问题