◀ANSI版開発トップへ
  • 4663 物理行とレイアウト行と
    • 4672 Re:物理行とレイアウト行と
  • [4663] 物理行とレイアウト行と げんた 2007年01月20日 17:37

    物理行とレイアウト行の誤りというのがこれまでも何度かあったと思いますが,レイアウト行内の物理桁位置を受け取る関数もあるんですね.この3種類を間違えずに使うのは結構難しいかも.

    それぞれに異なる型を作って,互いに代入出来ないように...今からするのも難しいですよね.どこも見た瞬間に判断出来るようには作ってないですし,変換結果を同じ変数に入れている場合もあります.

    既存部分はそのままに新たに変更する部分にのみ適用できて,間違いを機械的に(コンパイルエラーなどで)検出出来る方法って無いでしょうか.
    • [4672] Re:物理行とレイアウト行と dskoba 2007年02月09日 23:16

      class CPhysicalLine {
      public:
      CPhysicalLine() {};
      ~CPhysicalLine() {};

      CPhysicalLine& operator =(int i) {
      n = i;
      return *this;
      }
      operator int() { return n; }
      operator const int() const { return n; }
      friend int operator +(const CPhysicalLine&, const CPhysicalLine&);
      friend int operator +(const CPhysicalLine&,const int);
      friend int operator +(const int,const CPhysicalLine&);
      friend int operator -(const CPhysicalLine&, const CPhysicalLine&);
      friend int operator -(const CPhysicalLine&,const int);
      friend int operator -(const int,const CPhysicalLine&);
      friend void operator +=(CPhysicalLine&, const int);
      private:
      int n;
      };

      class CLayout
      {
      ...
      // int m_nLinePhysical;
      CPhysicalLine m_nLinePhysical;
      ...
      };

      こういうコードが良いのかどうかよく分かりませんが,こんな感じでどうでしょうかね。
      関数の引数にした場合,int型を渡しても引数付きコンストラクタが無いのでコンパイルエラーになるのではないかと。