次の例を見てください。
// 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
場合) は、とにかくインターフェイスが強調表示を壊します。