Предположим, что я объявил функцию (или класс, не имеет значения) в заголовочном файле, который является частью пространства имен foo:
namespace foo
{
void bar();
…
}
Я долгое время открывал пространство имен, когда определял функцию в файле cpp:
namespace foo
{
void bar()
{
doSomething();
…
}
}
Это потому, что я узнал его таким образом, и он использовался в проекте, над которым я работал. Я никогда не думал об этом до недавнего времени, когда я наткнулся на проект, в котором вместо этого использовалась директива using:
using namespace foo;
void bar()
{
doSomething();
…
}
Наконец, есть возможность использовать полное имя. Я нахожу это довольно утомительным, особенно когда участвуют классы с большим количеством участников. По-моему, это не имеет большого смысла, когда все содержимое файла является частью одного пространства имен.
void foo::bar()
{
doSomething();
…
}
Итак, мой вопрос в том, какой из них должен быть предпочтительным и почему? Особенно в отношении первых двух опций (с использованием директивы против повторного открытия пространства имен).