最近我一直面临着一种非常奇怪的方式来编写原型:
void myProto( QList<::myObject::myStruct> myStructList );
我想知道“<::”和“>”是什么意思?
谢谢 !
QList
是一个模板,并且QList<Type>
是该模板的特化,具有实际的 type ::myObject::myStruct
。
是::
范围解析运算符,它告诉编译器myStruct
在范围内查找myObject
,它本身就在全局范围内。
::myObject::myStruct
表示在位于全局范围内myStruct
的类(或命名空间)中定义。myObject
<>
类型放在这些括号内,它表示该类型的模板的特化。
编译以下程序
struct A // GLOBAL A
{
void f()
{ }
};
namespace nm
{
struct A // nm::A
{ };
template <class T>
struct B
{
T a;
};
void f1(B<A> b) // WILL NOT COMPILE
{
b.a.f();
}
void f2(B< ::A> b) // WILL COMPILE
{
b.a.f();
}
}
int main()
{
}
nm::f1
不会编译
nm::f2
将编译
这是因为::A
(全局 A)有f
成员
nm::A
但没有f
成员。