出于调试的目的,我想找到一种方法如何自动跟踪参与了我的设计变量的变化。C++变量变化监测
我想获得的结果为像每一个变量被分配时间的新值的printf的,但无需手动插入所有的printf。
这样做的最好方法是什么? 感谢
出于调试的目的,我想找到一种方法如何自动跟踪参与了我的设计变量的变化。C++变量变化监测
我想获得的结果为像每一个变量被分配时间的新值的printf的,但无需手动插入所有的printf。
这样做的最好方法是什么? 感谢
尝试为他们写一些代理类和重新赋值运算符。它colud具有指针或值的语义,但我更喜欢指针,因为它很简单。
template<class T>
struct proxy
{
//add const version
T & operator *()
{
std::cout << "access" << std::endl;
return val_;
}
T * operator ->()
{
std::cout << "access" << std::endl;
return &val_;
}
proxy<T> & operator = (T const & other)
{
std::cout << "access" << std::endl;
val = other;
return (*this);
}
private:
T val_;
};
这有混合的语义。如果你写'代理
是的,但这是它应该的方式。 * i = x;代理服务器后面的赋值=) – kassak
创建要监视和确定适当的operator=
赋值运算符方法变量的新类:
template <class T>
class MonitoredVariable
{
public:
MonitoredVariable() {}
MonitoredVariable(const T& value) : m_value(value) {}
T operator T() const { return m_value; }
const MonitoredVariable& operator = (const T& value)
{
printf("Variable modified\n");
m_value = value;
return *this;
}
private:
T m_value;
}
用法示例:
MoniredVariable<int> x;
x = 42; // Will print "Variable modified"
当然,对于这有用,您必须在operator=
实现中包含相关信息,并且还必须重载其他算术赋值运算符如+=
,-=
等
yuk到printf:P – Caribou
调试器可以做到这一点。你需要在代码中完成吗? – jalf
否则(如果不是调试器方法)您需要确保使用访问器,或者包装所有变量,以便operator =,copy和其他分配方法触发某些输出。 – Caribou
请说你在用什么IDE?我知道在Visual Studio中使用它的几种方法。 –