A類模板聲明由名稱和模板參數組成。模板參數是第一位的,而尖括號內寫,就像這樣:
template <typename Foo, typename Bar>
class Gizmo
{
};
在這一點上,Foo
和Bar
不是真正的類型 - 他們是真正的類型的佔位符,當您實例化,你會提供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
。
請花些時間[格式化您的問題](http:// stackoverflow。com/help/formatting)並告訴我們一些關於上下文的信息。例如。 *左側的所有內容*左側的內容? – dyp
我能想到的唯一可能是你可能會指的是(例如)'foo'不能被分配給'foo '類型的變量;即使存在從「int」到「long」的隱式轉換,這兩個模板實例化也是不相關的。類型必須完全匹配。 –
cHao
唉我很抱歉,但我真的很害怕從這個考試,這件事很重要:(反正當我從一個有模板的類的對象,它像這樣去