Должно ли использование псевдонимов пространства имен С++ в файлах заголовков?
Он рассмотрел плохую практику, чтобы использовать 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::...