最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++調(diào)試追蹤class成員變量的方法

 更新時(shí)間:2013年11月15日 15:00:47   作者:  
本文所講的是不通過修改一個(gè)class的成員,就能夠追蹤其成員。方法就是類似C語言中的函數(shù)指針

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

復(fù)制代碼 代碼如下:

int (*pfun)(int arg)=0;
int fun(int arg);    //這個(gè)函數(shù)實(shí)現(xiàn)隨便啦,我就不寫了。

如果我們想利用函數(shù)指針操作函數(shù),就和指針變量使用一樣:

復(fù)制代碼 代碼如下:

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

對(duì),很雞肋也沒必要。這是當(dāng)然,因?yàn)槲覀儧]用在對(duì)的地方。下面我要講的是利用一個(gè)類去call back另一個(gè)無關(guān)類的成員。

代碼:

復(fù)制代碼 代碼如下:

#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的成員函數(shù)地址傳給了Functor的函數(shù)指針,從而能夠通過Functor的成員處理A中的成員。
這里用到了對(duì)operator()的重載,可以換成別的函數(shù)處理Functor的函數(shù)指針
(不處理也行,但是函數(shù)指針很繞人,不直觀),像這樣:

復(fù)制代碼 代碼如下:

#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)         //改動(dòng)
   {
       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);      //改動(dòng)
    return 0;
}

C++確實(shí)復(fù)雜,但是我們?nèi)绻煤?,?fù)雜就是強(qiáng)大。

相關(guān)文章

  • C++中stack、queue、vector的用法詳解

    C++中stack、queue、vector的用法詳解

    本文通過實(shí)例代碼給大家介紹了C++中stack、queue、vector的用法,需要的朋友參考下吧
    2017-08-08
  • C/C++實(shí)現(xiàn)經(jīng)典象棋游戲的示例代碼

    C/C++實(shí)現(xiàn)經(jīng)典象棋游戲的示例代碼

    中國(guó)象棋是起源于中國(guó)的一種棋,屬于二人對(duì)抗性游戲的一種,在中國(guó)有著悠久的歷史。本文將利用C++實(shí)現(xiàn)這一經(jīng)典游戲,快跟隨小編一起學(xué)習(xí)一下吧
    2022-06-06
  • C語言實(shí)現(xiàn)簡(jiǎn)單電子通訊錄

    C語言實(shí)現(xiàn)簡(jiǎn)單電子通訊錄

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單電子通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹

    C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹

    這篇文章主要介紹了C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹,定時(shí)器可以由很多種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),比如最小堆、紅黑樹、跳表、甚至數(shù)組都可以,其本質(zhì)都是拿到最小時(shí)間的任務(wù),然后取出該任務(wù)并執(zhí)行,更多相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-09-09
  • C++?LeetCode1769移動(dòng)所有球到每個(gè)盒子最小操作數(shù)示例

    C++?LeetCode1769移動(dòng)所有球到每個(gè)盒子最小操作數(shù)示例

    這篇文章主要為大家介紹了C++?LeetCode1769移動(dòng)所有球到每個(gè)盒子所需最小操作數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C程序讀取鍵盤碼的方法

    C程序讀取鍵盤碼的方法

    這篇文章主要介紹了C程序讀取鍵盤碼的方法,運(yùn)行時(shí)可通過鍵盤按鍵獲取其對(duì)應(yīng)的鍵盤碼,文章最后附帶了鍵盤碼與按鍵的對(duì)照表,需要的朋友可以參考下
    2014-09-09
  • Qt的qDebug使用小結(jié)

    Qt的qDebug使用小結(jié)

    使用qDebug()函數(shù)它可以把調(diào)試信息直接輸出到控制臺(tái)上,本文就來介紹一下qDebug的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-06-06
  • 一篇文章帶你了解C語言操作符

    一篇文章帶你了解C語言操作符

    指令系統(tǒng)的每一條指令都有一個(gè)操作符,它表示該指令應(yīng)進(jìn)行什么樣性質(zhì)的操作,不同的指令用操作符這個(gè)字段的不同編碼來表示,每個(gè)編碼代表一種指令,這篇文章主要給大家介紹了關(guān)于C語言中操作符的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • C語言構(gòu)建動(dòng)態(tài)數(shù)組完整實(shí)例

    C語言構(gòu)建動(dòng)態(tài)數(shù)組完整實(shí)例

    這篇文章主要介紹了C語言構(gòu)建動(dòng)態(tài)數(shù)組完整實(shí)例,幫助讀者加深對(duì)C語言數(shù)組及指針的理解,需要的朋友可以參考下
    2014-07-07
  • C語言實(shí)現(xiàn)2048游戲(ege圖形庫版)

    C語言實(shí)現(xiàn)2048游戲(ege圖形庫版)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)2048游戲,ege圖形庫版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論

高淳县| 黔江区| 江西省| 台东市| 东海县| 泗阳县| 英超| 额尔古纳市| 闸北区| 莱州市| 牙克石市| 曲水县| 惠州市| 绵阳市| 元阳县| 永福县| 佛冈县| 重庆市| 兴业县| 邛崃市| 承德市| 平塘县| 阿拉善右旗| 敦化市| 会理县| 莲花县| 博客| 兖州市| 长乐市| 西乡县| 眉山市| 成安县| 开远市| 萝北县| 都江堰市| 汾阳市| 德庆县| 乌兰县| 定远县| 获嘉县| 隆安县|