欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

對,很雞肋也沒必要。這是當(dāng)然,因?yàn)槲覀儧]用在對的地方。下面我要講的是利用一個類去call back另一個無關(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中的成員。
這里用到了對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)         //改動
   {
       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++確實(shí)復(fù)雜,但是我們?nèi)绻煤?,?fù)雜就是強(qiáng)大。

相關(guān)文章

  • 淺談c++的編譯和運(yùn)行

    淺談c++的編譯和運(yùn)行

    下面小編就為大家?guī)硪黄獪\談c++的編譯和運(yùn)行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • c++作用域運(yùn)算符用法(全局變量和局部變量)

    c++作用域運(yùn)算符用法(全局變量和局部變量)

    這篇文章主要介紹了c++作用域運(yùn)算符用法,需要的朋友可以參考下
    2014-04-04
  • C++中指向?qū)ο蟮某V羔樑c指向常對象的指針詳解

    C++中指向?qū)ο蟮某V羔樑c指向常對象的指針詳解

    如果一個變量已經(jīng)被聲明成常變量,則只能用指向常變量的指針變量指向它,而不能用一般的(非const型的)指針變量指向它
    2013-10-10
  • C++實(shí)現(xiàn)二叉樹非遞歸遍歷方法實(shí)例總結(jié)

    C++實(shí)現(xiàn)二叉樹非遞歸遍歷方法實(shí)例總結(jié)

    這篇文章主要介紹了C++實(shí)現(xiàn)二叉樹非遞歸遍歷方法實(shí)例總結(jié),是算法設(shè)計(jì)中比較經(jīng)典的一個遍歷算法,需要的朋友可以參考下
    2014-08-08
  • C++控制臺實(shí)現(xiàn)密碼管理系統(tǒng)

    C++控制臺實(shí)現(xiàn)密碼管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++控制臺實(shí)現(xiàn)密碼管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C/C++高精度算法的實(shí)現(xiàn)

    C/C++高精度算法的實(shí)現(xiàn)

    這篇文章主要介紹了C/C++高精度算法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言實(shí)現(xiàn)簡單掃雷小程序

    C語言實(shí)現(xiàn)簡單掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單掃雷小程序,一款大眾類的益智小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++類模板與函數(shù)模板基礎(chǔ)詳細(xì)講解

    C++類模板與函數(shù)模板基礎(chǔ)詳細(xì)講解

    C++語言的模板技術(shù)包括函數(shù)模板和類模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類是C++語言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類模板,需要的朋友可以參考下
    2022-08-08
  • C++之&與*符號用法案例詳解

    C++之&與*符號用法案例詳解

    這篇文章主要介紹了C++之&與*符號用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 數(shù)組中求第K大數(shù)的實(shí)現(xiàn)方法

    數(shù)組中求第K大數(shù)的實(shí)現(xiàn)方法

    本篇文章是對數(shù)組中求第K大數(shù)的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論