2012-12-11 12 views
2

取決於Scott Myers advice在大多數情況下,非成員好友函數在成員函數中更喜歡它們是有意義的 - 對於設置名稱空間的建議約定是什麼?對非會員非朋友功能的命名空間有什麼好的約定?

特別是,您如何避免將所有內容嵌入到命名空間中,並最終導致可讀性較差的代碼。如:

namespace Vector 
{ 
    class Vector2 {...}; 
    bool IsUnitVector(const Vector2& vector); 
} 

從而造成呼叫如:

Vector::Vector2 position; 
if (Vector::IsUnitVector(position)) {...} 

是對以下可接受的,例如:

class Vector2 {...}; 
namespace Vector2 
{ 
    bool IsUnitVector(const Vector2& vector); 
} 

要允許更易讀,並分組更多邏輯調用:

Vector2 position; 
if (Vector2::IsUnitVector(position) {...} 
+0

要求廣泛推薦最佳實踐的問題在堆棧溢出時是無關緊要的。對這個問題沒有一個客觀正確的答案。這完全是辯論和意見的問題。例如:你聲稱「將所有內容嵌套到命名空間中」導致「可讀性較差的代碼」,但我會斷言,如果你明智地選擇了你的名字,情況正好相反。 –

回答

3

你可以將它們在相同的命名空間,並依靠參數相關的查找:

Vector::Vector2 position; 
if (IsUnitVector(position)) {...} // Magically resolves to Vector::IsUnitVector 

定義命名空間具有相同名稱作爲一類是在最好的混亂,並可能導致歧義錯誤。