C++如何调试追踪class成员变量

来源:爱站网时间:2021-03-05编辑:网友分享
C++如何调试追踪class成员变量?对于这个问题你的了解有多少呢?今天爱站小编就为大家详细介绍关于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
using namespace std;
template
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         return 0;
    }
private:
    int a;
};
int main()
{
    A a(10);
    Functor trace(&a,&A::traced);
    trace(5);
    return 0;
}

 

第33行把class A的成员函数地址传给了Functor的函数指针,从而能够通过Functor的成员处理A中的成员。
这里用到了对operator()的重载,可以换成别的函数处理Functor的函数指针
(不处理也行,但是函数指针很绕人,不直观),像这样:

 

 

#include
using namespace std;
template
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         return 0;
    }
private:
    int a;
};
int main()
{
    A a(10);
    Functor trace(&a,&A::traced);
    trace.out(5);      //改动
    return 0;
}

 

C++确实复杂,但是我们如果利用好,复杂就是强大。

文中内容就是小编为大家介绍C++如何调试追踪class成员变量的方法,这篇文章以实例为主为,方便有经验的朋友,如果没有相关经验可以关注我们爱站技术频道。

上一篇:C++通过ostringstream实现任意类型转string的教程

下一篇:C++中异常的解决方法

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载