2012-07-27 2 views
2

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는 정적 메서드에서 비 정적 클래스 멤버 m_myInt에 액세스하고 &이 회원의 주소를 취합니다 나는 다음과 같은 코드를 이해할 수 없습니다. 이 코드는 성공적으로 컴파일되고 실행됩니다. 어떻게 가능할까요? 정적 메서드는 어떤 클래스 인스턴스를 사용합니까?

+0

이것은 실제로 멤버에 대한 포인터입니다 (인스턴스의 멤버에 대한 포인터가 아닙니다). [이 질문] 참조 (http://stackoverflow.com/q/670734/1272627); 그것은 좋은 해답을 가지고 있습니다. – Kaiged

답변

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. 

가능하고 멋진 멋진 것들을 허용합니다.

+0

대단히 감사합니다! – user1558573

관련 문제