Скрытие имени в пространстве имен C ++

Предположим, этот кусок кода:

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, это означает, что я должен вручную проверить все функции, скрытые моей перегрузкой, и добавить ::

Как правильно решить эту проблему?

1

Решение

Я попробовал это, и он отлично работает:

namespace abc {
void sqrt(SomeType x) {}
using std::sqrt;

float x = 1;
float y1 = sqrt(x);
float y2 = sqrt(x);
}
3

Другие решения

В общем-то using namespace stdсчитается плохой практикой: Почему "используя пространство имен std" считается плохой практикой?

Рекомендуется быть настолько явным, насколько это возможно, поэтому, указав std::sqrt() нет никакой путаницы в том, какую функцию вы на самом деле вызываете. например

namespace abc
{
void sqrt(SomeType x) {}

float x = 1;
float y1 = sqrt(x);
float y2 = std::sqrt(x);
}
2

По вопросам рекламы [email protected]