我一直在閱讀Josuttis模板書,並一直試圖將我的頭放在ADL周圍。他說:「ADL通過在名稱空間和類中查找名稱」與「調用參數的類型」相關聯。我只是想看看它是如何工作在一個類中查找名稱。下面我舉了一個我的測試例子。我看到它是如何在命名空間中查找名稱的。參數相關查找是否僅搜索名稱空間或類?
class bryan_ns {
public:
class bryan {
public:
enum E { e1 };
static void bryan_test() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
void f(bryan::E) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
void f(int)
{
std::cout << "::f(int) called\n";
}
int main()
{
f(bryan_ns::bryan::e1); // calls ::f(int)
}
但是,如果我改變bryan_ns一個命名空間像這樣:
namespace bryan_ns {
public:
class bryan {
public:
enum E { e1 };
static void bryan_test() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
void f(bryan::E) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
void f(int)
{
std::cout << "::f(int) called\n";
}
int main()
{
f(bryan_ns::bryan::e1); // calls bryan_ns::f(bryan::E)
}
非常感謝,我非常感謝你的幫助。你幫助我終於明白這一點。 – 2012-07-13 21:09:27