2014-01-07 57 views
-3

這可能是一個愚蠢的問題,但對我來說非常重要,明天是我在面向對象C++的期末考試,無論如何,我的老師說我什麼時候非常重要的事情(我不記得)應該在製作對象時指定變量或數據類型,它類似於int int,int,int,double,int>。左邊的所有東西都必須是相同的類型,或者相反,我記不住它,請如果任何人有關於我在說什麼的想法請幫助我< 3 am絕望關於C++中的模板

編輯: 唉我很抱歉,但我真的很害怕從這個考試,我正從一個有模板的類中創建一個對象ike這個類< .int,int,double。> obj1,對吧?這些數據類型在中間,有一條關於它們的規則,說如果第一個類型是整數,那麼它的所有東西都是相同的類型或類似的東西,這是我不記得的東西

+1

請花些時間[格式化您的問題](http:// stackoverflow。com/help/formatting)並告訴我們一些關於上下文的信息。例如。 *左側的所有內容*左側的內容? – dyp

+0

我能想到的唯一可能是你可能會指的是(例如)'foo '不能被分配給'foo '類型的變量;即使存在從「int」到「long」的隱式轉換,這兩個模板實例化也是不相關的。類型必須完全匹配。 – cHao

+0

唉我很抱歉,但我真的很害怕從這個考試,這件事很重要:(反正當我從一個有模板的類的對象,它像這樣去

回答

3

A類模板聲明由名稱模板參數組成。模板參數是第一位的,而尖括號內寫,就像這樣:

template <typename Foo, typename Bar> 
class Gizmo 
{ 
}; 

在這一點上,FooBar不是真正的類型 - 他們是真正的類型的佔位符,當您實例化,你會提供Gizmo

實例化類模板開始與類名,其次是<,然後以逗號分隔的模板參數列表,由>終於跟着你的變量名:

Gizmo<int, double> myGizmo; 

這些數據類型在中間,有一條關於它們的規則說如果 第一個類型是整數,那麼它的所有東西都是 是相同的類型,或者類似的東西,那是我不記得

不,沒有這樣的規則。上面的任何模板參數都可以是任何類型。以下是所有合法的:

Gizmo<int, double> g1; 
Gizmo<int, std::string> g2; 
Gizmo<std::string, int> g3; 
Gizmo<double, char> g4; 

什麼,你可能會想的是默認參數。隨着類模板可以爲模板參數指定一些默認值:

template <typename Foo=int, typename Bar=double> 
class Gizmo 
{ 
}; 

但是,如果你指定一個默認模板參數,那麼以後所有模板參數必須也有默認值。因此,這是確定:

template <typename Foo, typename Bar=int> 
class Gizmo 
{ 
}; 

...但是這並不:

template <typename Foo=int, typename Bar> 
class Gizmo 
{ 
}; 

因爲對Foo默認,但不是Bar

+0

請注意'typename'可以替代上面的'class' - 兩者是相同的。 –

+0

非常感謝你,默認的模板參數規則就是我想要記住的東西,並且我把它與其他東西混淆了,非常感謝你,因爲我的考試時間是在45分鐘內保存了我的。 另外我很對不起所有人,因爲我的問題很混亂。 –