2014-07-15 75 views
0

我知道在頭文件中使用「using namespace xxx」是一種不好的做法,但接口頭文件中的typedef怎麼辦?在接口頭文件中使用typedef是不好的做法嗎?

例如:

typedef std::set<unsigned int> rsids_type; //!< typedef something. 
struct IRsids 
{ 
    virtual const rsids_type& GetRsids() = 0; 
} 

在我的選擇,我想這也是一個不好的做法,我們導入一個名爲「rsids_type」到全局命名空間?那麼下面的行動呢?

struct IRsids 
{ 
    typedef std::set<unsigned int> rsids_type; //!< typedef something inside the interface class. 
    virtual const rsids_type& GetRsids() = 0; 
} 
+3

爲什麼不聲明在頭文件中的新的命名空間,並把typedef的呢? –

回答

2

不必要污染全球命名空間typedef是由語言允許的,但按照慣例,顯然氣餒。

命名空間在這裏(除其他外),以​​避免名稱衝突,所以把你的類型定義在名稱空間和/或類內(作爲第二個例子)。

typedefstypedefs通常進入頭文件,通常用作封裝的一種方式(您可以在簡單名稱後面隱藏複雜類型),例如, :

typedef std::vector<std::vector<double>> Matrix 

標準庫的實現遍佈全境。

注:

  • using namespaceshould be avoided in headers因爲任何包括頭帶來整個命名它。 typedef並不是這種情況,它基本上是一個類型別名,所以沒有問題。
  • 在C++ 11,typedef S和using別名是等價的:

例子:

using Matrix = std::vector<std::vector<double>>; 
相關問題