我必须移植一些C ++代码并找到这个奇怪的typedef:
typedef uint32_t SomeClassName::* ptr;
目标编译器是MSVC ++。据我了解,这只是为名为uint32_t*
的{{1}}创建了一个别名。 ptr
的部分没有任何用处,应该被兼容的C ++编译器视为错误。我是对还是错?
另外,在SO上发现了Unusual scope resolution operator问题,可能会回答这个问题,但我不确定。
答案 0 :(得分:2)
这是指向成员的指针。具体而言,ptr
类型的变量可以指向uint32_t
的任何SomeClassName
数据成员。它可以像这样使用:
struct Foo {
int a;
int b;
float c;
};
Foo foo;
int Foo::* ptr;
ptr = &Foo::a;
foo.*ptr = 10; //Set foo.a to 10
ptr = &Foo::b;
foo.*ptr = 15; //Set foo.b to 15
//ptr = &Foo::c; //Won't compile