ゆとりーなの日記

日記的な事を書いて行くと思はれる

これだからVCは

ベクトルとか行列をどうしようかと考えてたのですが、TwiterでBoost.uBlasでも固定長的なの出きるよ的なサムシングが聞こえてきたのでそれを採用しました。

class vector3 : public boost::numeric::ublas::vector<float, boost::numeric::ublas::bounded_array<float, 3>> {
  typedef boost::numeric::ublas::vector<float, boost::numeric::ublas::bounded_array<float, 3>> base_vector;
 public:
  vector3() : base_vector(3) {}
  vector3(const float x, const float y, const float z) : base_vector(3) {
    (*this)(0) = x;
    (*this)(1) = y;
    (*this)(2) = z;
  }
  template <class R>
  vector3(const boost::numeric::ublas::vector_expression<R> &rhs) : base_vector(rhs) {}
  template <class R>
  void operator =(const boost::numeric::ublas::vector_expression<R> &rhs) {
    base_vector::operator=(rhs);
  }
  void operator =(const base_vector &rhs) {
    base_vector::operator=(rhs);
  }
};

こんな感じです。ところがどっこいこの子をメンバ変数として持ったりデフォルト引数として取ったりすると、コンパイラが死にます。死なないときもあるのでなんとも言えないのですが、とりあえず死ぬときは周辺コードを単純化してくださいとくるのでできる限り単純化して使うことにしました。その結果デフォルト引数を使うことができなくなってしまいましたが、Googleスタイル的にもデフォルト引数は駄目って言ってた気がするのでこれでいいということにします。とりあえずメンバ変数として持つときは落ちないくらいには頑張ってくれるみたいなのでこの辺りで妥協しましょう。