程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++調試追蹤class成員變量的辦法

C++調試追蹤class成員變量的辦法

編輯:關於C++

C++調試追蹤class成員變量的辦法。本站提示廣大學習愛好者:(C++調試追蹤class成員變量的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C++調試追蹤class成員變量的辦法正文


好比: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++確切龐雜,然則我們假如應用好,龐雜就是壯大。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved