CGAL:继承和内核

时间:2012-04-20 07:25:38

标签: cgal

CGAL问题:

我尝试将一个属性添加到点类。我猜测的第一步是继承一个内核并用我自己的点类替换我从CGAL继承的。但是,只是试图让这个小小的第一步遇到麻烦。

编辑:根据下面的评论,我将继承更改为手册中描述的方式。下面的代码给出了以下编译错误:

  • 'typename CGAL :: Extended_homogeneous :: Base'name'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_> >
{};

Minimal.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;
}

如果将inhertiance更改为“public K_Base :: Base :: template B :: Type”,它将编译但是我会错过Extentensions的原因吗?因为我收到了错误

  • “构造函数不适用于此内核”

    当我运行程序时

2 个答案:

答案 0 :(得分:1)

以下描述了定义自己内核的正确方法 page

由于类型相等包装器的原因,事情看起来很复杂 内核:: Point_2等于Point_2。

答案 1 :(得分:0)

你应该在这里阅读这个帖子(见Sebastien的第4篇文章): http://cgal-discuss.949826.n4.nabble.com/Exact-kernels-and-planes-td4655222.html

它解释了这个问题。