Должно ли использование псевдонимов пространства имен С++ в файлах заголовков?

Он рассмотрел плохую практику, чтобы использовать using namespace в заголовках С++. Нехорошая идея использовать псевдонимы пространства имен в заголовке, и каждый файл реализации должен объявлять псевдонимы, которые он хочет использовать?

Поскольку заголовки - это места, в которых вы, как правило, используете полностью определенные имена (поскольку мы не используем пространства имен в заголовках), псевдонимы будут полезны, но они все равно будут распространяться, хотя ваш источник, когда #included.

Какая здесь самая лучшая практика? И какова область псевдонима пространства имен?

Ответ 1

Если вы добавите псевдоним пространства имен в свой заголовок, этот псевдоним станет частью вашего (публичного) API.

Иногда этот метод используется для создания версий, совместимых с ABI (или, по крайней мере, чтобы сделать разрыв видимым) следующим образом:

namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;

или чаще:

namespace lib {
   namespace v1 {}
   namespace v2 {}
   using namespace v2;
}

С другой стороны, если вы делаете это просто для того, чтобы сохранить некоторую печать, это, вероятно, не очень хорошая идея. (Все еще намного лучше, чем using директивы using)

Ответ 2

Я делаю это с неназванными пространствами имен таким образом:

#include <whatyouneed>
...
namespace {

typedef ...
using ..
namespace x = ...

// anything you need in header but shouldn't be linked with original name

}

// normal interface
class a: public x::...