Предположим, этот кусок кода:
using namespace std;
namespace abc {
void sqrt(SomeType x) {}
float x = 1;
float y1 = sqrt(x); // 1) does not compile since std::sqrt() is hidden
float y2 = ::sqrt(x); // 2) compiles bud it is necessary to add ::
}
Есть ли способ, как вызвать std :: sqrt внутри пространства имен abc без ::?
В моем проекте я изначально не использовал пространства имен, поэтому все перегруженные функции были видны. Если я ввожу пространство имен abc, это означает, что я должен вручную проверить все функции, скрытые моей перегрузкой, и добавить ::
Как правильно решить эту проблему?
Я попробовал это, и он отлично работает:
namespace abc {
void sqrt(SomeType x) {}
using std::sqrt;
float x = 1;
float y1 = sqrt(x);
float y2 = sqrt(x);
}
В общем-то using namespace std
считается плохой практикой: Почему "используя пространство имен std" считается плохой практикой?
Рекомендуется быть настолько явным, насколько это возможно, поэтому, указав std::sqrt()
нет никакой путаницы в том, какую функцию вы на самом деле вызываете. например
namespace abc
{
void sqrt(SomeType x) {}
float x = 1;
float y1 = sqrt(x);
float y2 = std::sqrt(x);
}