Требует ли определенного порядка для #include в c ++ признак плохого дизайна библиотеки / заголовка? - PullRequest
12 голосов
/ 17 декабря 2008

Я использовал несколько очень масштабных систем и никогда не видел требуемый заказ, но недавно столкнулся с ним. Есть ли в библиотеке STL или STD или даже в Boost какие-либо случаи, когда определенные включения должны приходить в определенном порядке?

Ответы [ 13 ]

0 голосов
/ 23 декабря 2008

Да, требование определенного порядка для включений в c ++ является признаком плохого дизайна библиотеки / заголовка.

Хотя для прямого использования может потребоваться включение более одного файла для полного использования класса. Смотрите пример ниже:

// А.ч

class B; // forward declaration

class A
{
    void doStuff(const B& b);
};

// main.cpp

#include <A.h>
#include <B.h>

int main()
{
    A a;
    B b;
    a.doStuff(b);
}
0 голосов
/ 18 декабря 2008

Вы должны использовать include guard и forward-декларации, таким образом у вас не должно быть особых проблем с порядком включения заголовков.

Иногда все еще требуется, чтобы заголовок был первым или последним, не знаю почему.
(Например: в Source SDK)

0 голосов
/ 18 декабря 2008

Не в моих силах. Это довольно плохая практика. Я недавно столкнулся с этим с заголовком Windows и некоторым странным интерфейсом в моем коде.

...