我一直在使用“const ObjArray&
“作为 ObjArray 模板的参数,没有考虑它。它似乎工作正常,但当我再次阅读它时,它看起来不太对劲。不应该是”const ObjArray<T> &
“?可以在不带参数的情况下引用模板名称吗?它在下面是否可以工作,只是因为它被声明为内联,编译器假定 T ?
template <class T>
class ObjArray : public BArray
{
public:
inline ObjArray() :
BArray(sizeof(T), NULL)
{
}
inline ObjArray(const ObjArray& src) :
BArray(sizeof(T), NULL)
{
copyFrom((ObjArray&)src);
}
inline ObjArray(ObjArray& src) :
BArray(sizeof(T), NULL)
{
copyFrom(src);
}
...
};
不,这种用法是正确的:在类模板内,类名引用模板的该实例,因此模板参数不是必需的:
template<typename T>
struct foo
{
foo( const foo& ); //Copy ctor. foo is the same as foo<T>
};
这种行为在这一点中得到了很好的定义14.6.1 本地声明的名称标准的(重点是我的):
14.6.1 本地声明的名称 [temp.local]
与普通(非模板)类一样,类模板有一个注入类名
(第 9 条)。注入类名可以与或不与
模板参数列表。当没有使用它时
template-argument-list,相当于注入的类名
后面是类模板的模板参数
。当它与模板参数列表一起使用时,它指的是
指定的类模板特化,可以是当前的
专业或其他专业。
请注意,语法只是当前模板实例的别名。如果您需要具有其他参数的相同模板,则需要使用经典语法显式指定它。例如:
template<typename U>
operator foo<U>() const //Implicit conversion to other instance of the template
{
return ...;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)