4

デバッグの目的で、設計に含まれる変数の変更を自動的に追跡する方法を見つけたいと考えています。

私が取得したい結果は、変数が割り当てられるたびに新しい値の printf のようなものですが、すべての printf を手動で挿入する必要はありません。

これを行う最善の方法は何ですか?ありがとう

4

3 に答える 3

6

監視する変数の新しいクラスを作成し、適切な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=実装に関連情報を含める必要があります。また+=-=、 などの他の算術代入演算子もオーバーロードする必要があります。

于 2012-12-17T20:50:22.003 に答える
0

それらのプロキシ クラスを作成し、代入演算子を再定義してみてください。ポインターまたは値のセマンティックを持つことはできませんが、単純なのでポインターを好みます。

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_;
};
于 2012-12-17T20:50:19.673 に答える