具有奇怪范围解析运算符的 C++ typedef
C++ typedef with strange scope resolution operator
我必须移植一些 C++ 代码,发现这个奇怪的类型定义:
typedef uint32_t SomeClassName::* ptr;
目标编译器是MSVC++。据我了解,这只是为名为 ptr
的 uint32_t*
创建了一个别名。带有 SomeClassName::
的部分没有任何用处,兼容的 C++ 编译器应将其视为错误。我是对还是错?
此外,在 SO 上发现了 Unusual scope resolution operator 个问题,这可能回答了这个问题,但我不确定。
这是指向成员的指针。具体来说,ptr
类型的变量可以指向 SomeClassName
的任何 uint32_t
数据成员。可以这样使用:
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
我必须移植一些 C++ 代码,发现这个奇怪的类型定义:
typedef uint32_t SomeClassName::* ptr;
目标编译器是MSVC++。据我了解,这只是为名为 ptr
的 uint32_t*
创建了一个别名。带有 SomeClassName::
的部分没有任何用处,兼容的 C++ 编译器应将其视为错误。我是对还是错?
此外,在 SO 上发现了 Unusual scope resolution operator 个问题,这可能回答了这个问题,但我不确定。
这是指向成员的指针。具体来说,ptr
类型的变量可以指向 SomeClassName
的任何 uint32_t
数据成员。可以这样使用:
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