Elegance, kapsülleme ve ADL'den faydalanmak için (Argument Dependent Lookup) işlev argümanının ad alanı içinde bir işlev tanımlamak yaygındır.İkili bir operatör için en iyi ad alanı nedir?
Farklı ad alanında iki kitaplığım olduğunu varsayalım. Üç vaka vardır: 1) biri kontrol ettiğim bir kütüphanenin bir kısmı ve diğeri üçüncü taraf (örneğin Boost) veya 2) İkisini de kontrol ediyorum, ya da 3) Hiçbirini kontrol etmiyorum (sadece “yapıştırıcı” kodu yazıyor).
Böyle bir şey var,
ben A'ya 'de "stream" B istiyorumnamespace ns_A{
struct A{...}; // something that looks like iostream
}
namespace ns_B{
struct B{...};
}
, en iyi seçenek
namespace ???{ // what is more correct ns_A, or ns_B?
A& operator<<(A& a, B const& b){...}
}
nedir ya ben hem ad koymak gerekir?
namespace ns_B{
A& operator<<(A& a, B const& b){...}
}
namespace ns_A{
using ns_B::operator<<;
}
böyle bir ikili işlevini tanımlamak için en iyi ad hangisidir?
(C++ 11'in ad satır içi herhangi bir öneri değiştiriyor mu?)
(diğer şeyler eşit olduğunda o sezgisel namespace ns_B
tercih daha iyi görünüyor çünkü örnek operator<<
kullanın.)
Denetlemediğiniz ad alanıyla uğraşmayın. – Walter