4

異なるライブラリを使用するとき、私は常に、それぞれが同じ「実際の単語エンティティ」のカスタムタイプを持っていることに気付きました。

3次元のポイントを使用するプロジェクトがあるとします。OpenCvとPCL(ポイントクラウドライブラリ)のアルゴリズムを使用するだけです。私はポイントのためにこれらのタイプで自分自身を見つけました:

  • OpenCvのPoint3_
  • PCLのPointXYZ
  • Point3d私のカスタムタイプ

これで、Point3d用に作成したアルゴリズムができましたが、これらのライブラリのアルゴリズムも使用したいと思います。大きなセットの各ポイントをあるタイプから別のタイプに前後に変換するには、メモリと時間がかかります。

これを回避するための最良の方法は何でしょうか?

4

1 に答える 1

1

あなたはこのようなことをすることができます

template<class T>
    struct Getter{

};

template<class T>
struct Getter<Point3_<T>>{
     typedef T& type;
     static type getx(Point3_<T>& p){
         return p.x;
     }
};
template<>
struct Getter<PointXYZ>{
     typedef float& type;
     static type getx(PointXYZ& p){
         return p.x;
     }
};

template <class T>
point_x(T& p) -> Getter<T>::type{
      return Getter<T>::getx(p);

}

yとzについても同じことを行います。次に、アルゴリズムを変更してテンプレートを取得し、px=...を使用する代わりに

getx(p) = ..
auto x = getx(p)
于 2012-11-29T15:36:12.667 に答える