C++調試追蹤class成員變數的方法_C 語言

來源:互聯網
上載者:User

比如:int (*foo)(int arg),記住要和另一個指標函數區分開來,類似這樣:int *foo(int arg).
比如我們可以這樣聲明一個變數和函數:

複製代碼 代碼如下:

int (*pfun)(int arg)=0;
int fun(int arg);    //這個函數實現隨便啦,我就不寫了。

如果我們想利用函數指標操作函數,就和指標變數使用一樣:

複製代碼 代碼如下:

pfun=fun;
int result=(*pfun)(123);

對,很雞肋也沒必要。這是當然,因為我們沒用在對的地方。下面我要講的是利用一個類去call back另一個無關類的成員。

代碼:

複製代碼 代碼如下:

#include <iostream>
using namespace std;
template<typename T,typename N>
class Functor{
public:
   Functor(T *otherp,N (T::*otherfun)(N arg))
   {
       mp=otherp;
       mfun=otherfun;
   }
   virtual N operator()(N arg)
   {
       return (*mp.*mfun)(arg);
   }
private:
   N   (T::*mfun)(N arg);
   T *mp;
};
class A{
public:
    A(int a0):a(a0){}
    int traced(int b)
    {
        cout<<"Trace a="<<a<<",b="<<b<<endl;
        return 0;
    }
private:
    int a;
};
int main()
{
    A a(10);
    Functor<A,int> trace(&a,&A::traced);
    trace(5);
    return 0;
}

第33行把class A的成員函數地址傳給了Functor的函數指標,從而能夠通過Functor的成員處理A中的成員。
這裡用到了對operator()的重載,可以換成別的函數處理Functor的函數指標
(不處理也行,但是函數指標很繞人,不直觀),像這樣:

複製代碼 代碼如下:

#include <iostream>
using namespace std;
template<typename T,typename N>
class Functor{
public:
   Functor(T *otherp,N (T::*otherfun)(N arg))
   {
       mp=otherp;
       mfun=otherfun;
   }
   virtual N out(N arg)         //改動
   {
       return (*mp.*mfun)(arg);
   }
private:
   N   (T::*mfun)(N arg);
   T *mp;
};
class A{
public:
    A(int a0):a(a0){}
    int traced(int b)
    {
        cout<<"Trace a="<<a<<",b="<<b<<endl;
        return 0;
    }
private:
    int a;
};
int main()
{
    A a(10);
    Functor<A,int> trace(&a,&A::traced);
    trace.out(5);      //改動
    return 0;
}

C++確實複雜,但是我們如果利用好,複雜就是強大。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.