местный - PullRequest
       15

местный

2 голосов
/ 15 января 2011

Есть ли какой-нибудь способ # включить стандартные вещи локально (для одной функции, одного класса и т. Д. За раз) вместо глобально.Взяв очень простой пример, можно использовать std :: string, но он необходим только в одном классе, и вы не хотите, чтобы его накладные расходы существовали везде.

Ответы [ 5 ]

5 голосов
/ 15 января 2011

Вместо того, чтобы делать #include локальным, вам, вероятно, следует просто переместить класс, который требует его, в отдельный файл.

2 голосов
/ 15 января 2011

Поскольку #include - это просто разновидность замены текста перед компиляцией (препроцессором ), вопрос только в том, куда поместить оператор включения.

Вероятно, вы ссылаетесь на "локально" как " только в одном файле .cpp " и на "глобально" как " во всех файлах .cpp ".

Если это так, вы можете сделать #include «локально», включив только те файлы .cpp, которые вам нужны. Если вы хотите включить файл с одним оператором #include в несколько файлов, поместите оператор include в файл .h и включите этот файл .h во все необходимые файлы.

Хорошим местом для создания "глобального" #include является файл заголовка .h, который служит прекомпилированным заголовком .

1 голос
/ 15 января 2011

Один из способов сделать то, что вы хотите, это использовать вложенный класс, такой как class IMPL, и использовать указатель на него в качестве члена вашего класса.Вы определяете и реализуете your_class::IMPL в отдельных файлах.Таким образом, вы получите полное скрытие данных.

0 голосов
/ 15 января 2011

Хорошо, если вы #include что-то в файле .cpp, вы не получите доступ к этому заголовку в других файлах.Но если вы #include ah в файле bh, а затем #include bh в c.cpp, я думаю, у вас будет доступ к ah в c.cpp

0 голосов
/ 15 января 2011

Вы можете поместить определение std::string в локальный заголовок (это все, что находится в каталоге вашего проекта).

В любом случае, это нелегкая работа, особенно для такого класса шаблонов, как std::string: так как это шаблон, ему понадобится полное объявление, и ваша программа во время выполнения будет использовать std::string, как объявлено Ваш заголовок.

Кроме того, различные реализации STL могут реализовывать std::string по-разному, хотя интерфейс должен быть одинаковым.

Итак, краткий ответ: нет, используйте системные заголовки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...