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成员变量的方法,这篇文章以实例为主为,方便有经验的朋友,如果没有相关经验可以关注我们爱站技术频道。