2014-06-12 43 views
-3

我經常看到,在他們的聲明的開頭CPP類都有這個書面typedef base_type data_type是什麼意思?

typedef base_type data_type 

據我所知,這已經是與使你的類與載體相容。任何人都可以引導我?

使用谷歌搜索這也會給你數百個使用這個聲明的鏈接。

+1

他們僅僅使用'data_type'類型而不是'base_type',這樣'base_type'仍然是「隱藏」 –

+0

我想你在複製時丟失了'<…>'。 – kay

+0

typedef用於定義類型別名。它允許你用你自己的數據類型名稱來定義數據類型。例如:typedef Char myChar – AkshayP

回答

0

typedef typename Base<T>::Foo Foo是用於模板編程的常用技術。

由於Base<T>取決於模板參數T,編譯器無法知道任何特定類型TBase是專門讓Foo不是一個類型(或存在的話)。

所以你必須告訴編譯器它應該假定Foo是一個類型。

這是一個麻煩,是的。

但是,模板非常有用,所以它非常值得一點麻煩。 :)


上述以外,一個typedef剛剛介紹的替代名稱與只從原始非常細微的差別。

例如,給出int x = 42;陳述x.~int();是無效的,但typedef int Int; x.~Int();是確定的。

另一個細微的差別是構造函數和析構函數的定義,您必須使用原始類名稱。


在C++ 11可以在大致相同的方式使用作爲usingtypedef,例如using Int = int;

+0

這(第一個解釋)正是我所期待的。不知道爲什麼我放棄了投票。謝謝:) – maddy1907

+0

@ maddy1907我沒有downvote,但我正在考慮它。這個問題幾乎沒有任何信息或上下文。例如,沒有關於模板的單詞。阿爾法必須有一個水晶球,才能猜出你在 – Angew

+1

@ maddy1907之後:我認爲你沒有給出一個具體的確切例子而被低估了。把一個人不明白的東西概括化的問題是,有時候人們不夠理解,不能正確地概括,不知道哪些細節可以被忽略,哪些細節是至關重要的。因此,總的來說,嘗試逐字複製原始問題(或示例)是一個不錯的主意,沒有任何解釋並且什麼都不留。 –