1

次の例を見てください。

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

4

3 に答える 3