是什么,他们似乎都工作相同,编译奇怪的模板语法构造
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