是什麼,他們似乎都工作相同,編譯奇怪的模板語法構造
template <class T>
class why
{
public:
why()
{}
};
和
template <class T>
class why
{
public:
why<T>()
{}
};
之間的差異。
編輯
而且,如果他們是真正的一樣,這是爲什麼功能即使在C++語言?
是什麼,他們似乎都工作相同,編譯奇怪的模板語法構造
template <class T>
class why
{
public:
why()
{}
};
和
template <class T>
class why
{
public:
why<T>()
{}
};
之間的差異。
編輯
而且,如果他們是真正的一樣,這是爲什麼功能即使在C++語言?
他們是等價的。在前者,why
是注入是已定義是相同why<T>
名(其中T
是實際的模板參數)。這存在爲便於打字。
請注意,此注入是在類的範圍內,而不是在它的外面。很明顯,但鑑於:
template <typename T>
struct foo
{
foo x(foo f);
};
一個常見的錯誤可能是嘗試定義x
這樣的:
template <typename T>
foo foo<T>::x(foo f) { return f; }
但需要模板參數,這將在返回類型是一個錯誤,因爲foo
。在參數列表中的foo
是好的,但是,因爲foo<T>::
後,我們在類的範圍,foo
被定義爲foo<T>
。所以正確的方法是這樣的:
template <typename T>
foo<T> foo<T>::x(foo f) { return f; }
template <typename T>
foo<T> foo<T>::x(foo<T> f) { return f; } // equivalent
「'foo
@curiousguy:哎呀。 :) – GManNickG 2011-12-24 05:44:09
它們是一樣的。 'why'是一個代名詞'爲什麼' –
2011-12-24 04:32:46
嘛塞康一個是......你知道的,怪異的,你說。我也想知道它。那麼爲什麼在那裏?如果它是同義詞,有什麼意義? –
2011-12-24 04:33:01