Является ли хорошей идеей обернуть #include в блоке пространства имен?

У меня есть заголовок C, который был написан для компиляции как C и C ++ (он использует только функции из общего подмножества и использует эту extern "C" вещь).

Проблема в том, что заголовок объявляет материал в глобальном пространстве имен. Я бы предпочел избежать этого по обычным причинам. Я думал об этом:

 namespace foo { #include  } 

Делает это хорошая идея? Есть ли у меня альтернативы, которые не include редактирование файла заголовка?

    Нет, это плохая идея. С объявлениями C ++ это, скорее всего, приведет к ошибкам компоновщика, поскольку идентификаторы объявляются в неправильном пространстве имен. С помощью объявлений C он работает, но может скрывать столкновения между идентификаторами в глобальном пространстве имен (чего вы пытались избежать, я думаю) до времени ссылки; он действительно не помещает идентификаторы в пространство имен.

    Лучше всего было бы поместить свои собственные идентификаторы в пространство имен и не определять ничего, кроме main в глобальном.

    Я сделал это «поместил его в пространство имен» для в конце 1990-х годов.

    Хотя и не с полной поддержкой: это было основано на том, чтобы добавить поддержку того, что мне было нужно, когда мне это нужно.

    Ключом к этой работе было проверить, какие заголовки библиотеки C были включены, и обязательно включите их в первую очередь. Это сводилось к 4 таким заголовкам, IIRC. Однако любовь Microsoft к макросам осложнила ситуацию.

    Таким образом, это можно сделать на практике для заголовков C (или C ++, ограниченных C-подобным подмножеством), но по стоимости обновления вашей оболочки для каждой новой версии обертки, что является непрактичным и / или очень дорогостоящим. Не говоря уже о трудоемкой работе.

    В заключение нет, это не очень хорошая идея. 🙂

    Говоря по опыту.

    Давайте будем гением компьютера.