2016-08-22 54 views
4

例如,利用此代碼段:如何轉發聲明我將使用typedef創建的類型?

class Foo; 
class Something { 
    Foo *thing; 
}; 
typedef std::vector<Something> Foo; 

這並不編譯,因爲Foo已經是一個類型,當typedef被擊中。不過,我認爲這說明了我的用例;我有周期性的依賴關係,需要一個來完成其他的,但(目前)其中的一件事是typedef'd。我寧願不寫類似

class Foo { 
    std::vector<Something> inside; 
} 

,因爲那時我需要記住insidemy_foo.inside.some_method()。我還想避免在std::vector<Something>周圍寫一個包裝,因爲它會有很多樣板。

我該如何轉發聲明我正在用typedef定義的類型?另外,如何使用上述解決方案之一解決我的週期性依賴問題而不使用?它有可能嗎?

請注意,我不是問「我怎樣才能typedef與尚未申報的類型」。我在問「如何使用typedef來定義先前聲明的類型」。

+0

道歉,如果任何術語關閉。我從來沒有真正學過它。請隨時糾正我的疑問或者質疑假設。 –

+0

'typedef Foo;'也許 –

+0

@ Jean-FrançoisFabreIIRC那是一個編譯錯誤 –

回答

8

轉發聲明類來代替:

class Something; 
typedef std::vector<Something> Foo; 
class Something { Foo *thing; }; 

如果您正在使用C++ 11版本或更高版本,代替typedef的使用using聲明:

class Something; 
using Foo = std::vector<Something>; 
class Something { Foo *thing; }; 

而這一切。

+0

...哦。咄。我很聰明。 –

+0

有沒有特別的理由使用''''而不是'typedef'?當你想使用模板化的暱稱時,我知道這很重要,但這不是這種情況。 –

+1

@QPaysTaxes我會說,因爲我們生活在2016_中,但作爲聲明它對我來說也更加清晰。 – skypjack