最近我一直在面对编写原型的一种非常奇怪的方式:
void myProto( QList<::myObject::myStruct> myStructList );
我想知道“&lt; ::”和“&gt;”是什么是什么意思?
谢谢!
答案 0 :(得分:8)
QList
是一个模板,QList<Type>
是该模板的特化,其实际类型为::myObject::myStruct
。
::
是范围解析运算符,它告诉编译器在myStruct
范围内查找myObject
,{{1}}本身就是全局范围。
答案 1 :(得分:4)
::myObject::myStruct
表示引用位于全局范围的类(或命名空间)myStruct
中定义的myObject
。
<>
类型进入这些括号内,它表示该类型的模板的特化。
答案 2 :(得分:0)
编译以下程序
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
成员。