2

CGAL の質問:

ポイント クラスに 1 つのプロパティを追加しようとしています。私が推測する最初のステップは、カーネルを継承し、ポイント クラスを CGAL から継承した独自のものに置き換えることです。しかし、この小さな最初の一歩を踏み出そうとすると、問題が発生します。

編集:以下のコメントに基づいて、継承をマニュアルに記載されている方法に変更しました。以下のコードでは、次のコンパイル エラーが発生します。

  • 'typename CGAL::Extended_homogeneous::Base' 名前 'CGAL::Extended_homogeneous::Base', これはクラス テンプレートではありません |

とりわけ。

MyBase.h

#include <CGAL/Extended_homogeneous.h>

template < typename K_, typename K_Base >
class My_base  : public K_Base::template Base<K_>::Type
{
  typedef typename K_Base::template Base<K_>::Type   OldK;

public:
  typedef K_                                Kernel;

  template < typename Kernel2 >
  struct Base { typedef My_base<Kernel2, K_Base>  Type; };
 };

template < typename RT_ >
struct MyKernel  : public CGAL::Type_equality_wrapper<My_base<MyKernel<RT_>, CGAL::Homogeneous<RT_> >,  MyKernel<RT_> >
{};

最小.cpp

#include "MyKernel.h"
#include <CGAL/Nef_polyhedron_3.h>
typedef MyKernel<CGAL::Gmpz>    Kernel;

typedef CGAL::Nef_polyhedron_3<Kernel>  Nef_Polyhedron;
typedef Nef_Polyhedron::Plane_3  Plane;

int main()
{
  Nef_Polyhedron half_space(Plane(1,1,1,1), Nef_Polyhedron::EXCLUDED);

  return 0;
}

継承が「public K_Base::Base::template B::Type」に変更された場合はコンパイルされますが、拡張機能からのプロパティが不足していると思いますか? エラーが出るから

  • 「このカーネルではコンストラクターを使用できません」

    プログラムを実行すると

4

2 に答える 2

1

独自のカーネルを定義する正しい方法は、次の ページで説明されています。

Kernel::Point_2 を Point_2 に等しくする型等価ラッパーのため、事態は複雑に見えます。

于 2012-04-20T08:52:59.627 に答える
0

ここのスレッドを読む必要があります (Sebastien による 4 番目の投稿を参照): http://cgal-discuss.949826.n4.nabble.com/Exact-kernels-and-planes-td4655222.html

問題を少し説明します。

于 2013-11-06T22:29:14.977 に答える