Я бы отказался от первого ( изменить : вопрос изменился, первое - это то, что я тоже предпочитаю сейчас). Поскольку неясно, на что ссылается Бар, нужно смотреть только на определение функции. Кроме того, при использовании first метода могут отображаться ошибки с ошибками:
namespace bar {
struct foo { void f(); };
}
namespace baz {
struct foo { void f(); };
}
using namespace bar;
using namespace baz;
void foo::f() { // which foo??
}
Поскольку он смотрит в текущей области (там это глобальная область), он находит два foo и говорит, что ссылка на него неоднозначна.
Лично я бы сделал это так:
namespace foo {
void Bar::SomeMethod() {
// something in here
}
}
Также не ясно только из определения SomeMethod, к какому пространству имен оно принадлежит, но у вас есть область имен вокруг него, и вы можете легко найти его. Кроме того, теперь ясно, что Bar относится к пространству имен foo.
Второй способ, которым вы показываете, будет слишком много печатать для меня. Кроме того, второй способ может вызвать путаницу среди новых читателей вашего кода: foo - это класс, а Bar - его вложенный класс? Или foo - это пространство имен, а Bar - класс?