, у меня есть два пространства имен, каждое из которых имеет функцию с тем же именем. Если из одного из пространств имен я хочу вызвать функцию, которая лучше всего подходит. функция в NamespaceA, если я вызываю MyFunction (...), конечно, она использует функцию в NamespaceA. Однако, если я добавлю 'using NamespaceB :: MyFunction', я бы ожидал описанного мной поведения. на самом деле вижу, что он ВСЕГДА находит функцию NamespaceB, даже если я нахожусь в пространстве имен A. ОДНАКО, если я ТАКЖЕ добавляю using :: NamespaceA (даже если я уже нахожусь в пространстве имен A), он работает так, как я ожидал. ниже. Кто-нибудь может объяснить, как это работает?
#include <iostream>
namespace NamespaceA
{
void DoSomething();
void MyFunction(int object);
}
namespace NamespaceB
{
void MyFunction(float object);
}
namespace NamespaceA
{
void DoSomething()
{
using NamespaceA::MyFunction; // Note that without this line the lookup always fins the NamespaceB::MyFunction!
using NamespaceB::MyFunction;
MyFunction(1);
MyFunction(2.0f);
}
void MyFunction(int object)
{
std::cout << "int: " << object << std::endl;
}
}
namespace NamespaceB
{
void MyFunction(float object)
{
std::cout << "float: " << object << std::endl;
}
}
int main(int argc, char *argv[])
{
NamespaceA::DoSomething();
return 0;
}