我正在研究ns-3 tutorial。我无法理解以下代码段:
class MyObject : public Object
{
public:
static TypeId GetTypeId (void)
{
static TypeId tid = TypeId ("MyObject")
.SetParent (Object::GetTypeId ())
.AddConstructor<MyObject> ()
.AddTraceSource ("MyInteger",
"An integer value to trace.",
MakeTraceSourceAccessor (&MyObject::m_myInt))
;
return tid;
}
MyObject () {}
TracedValue<int32_t> m_myInt;
};
据我所知,MyObject :: m_myInt是从静态方法和&amp ;;访问非静态类成员m_myInt。取得这个成员的地址。此代码已成功编译和执行。怎么可能?静态方法使用什么类的实例?
答案 0 :(得分:2)
指向成员的指针可以指向成员方法或成员变量,也不需要声明或分配类的实例。但是,这并不意味着没有实例就可以做很多事情。您仍然需要一个实例来使用它们。请考虑以下代码:
class A
{
public:
void SomeMethod();
int someVar;
};
void (A::*pSomeMethod)() = &A::SomeMethod; //Declares a member pointer to method and assigns
int A::*pSomeVar = &A::someVar; //Declares a member pointer to int variable and assigns
A a; //Defines an instance
(a.*pSomeMethod)(); //Uses an instance with the pSomeMethod member pointer.
int var = (a.*pSomeVar); //Uses an instance with the pSomeVar member pointer.
这是可能的,它允许一些非常酷的东西。