2

私はns-3 のチュートリアルを勉強していました。次のコード スニペットを理解できません。

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 へのアクセスであり、& はこのメンバーのアドレスを取得します。このコードは正常にコンパイルおよび実行されます。どうすればそれが可能になりますか?静的メソッドが使用するクラスのインスタンスは?

4

1 に答える 1

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.

それは可能であり、かなりクールなものを可能にします。

于 2012-07-27T21:17:58.967 に答える