Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Inheriting from Extended_homogeneous

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Inheriting from Extended_homogeneous


Chronological Thread 
  • From: Johannes Ulen <>
  • To:
  • Subject: Re: [cgal-discuss] Inheriting from Extended_homogeneous
  • Date: Tue, 24 Apr 2012 12:54:37 +0200

Thank you!
With minor adjustment the code you sent did exactly what I needed.

For my curiosity (and futher people ending up here when they search for
my problem) I still do not understand how to inherit from
Extended_homogeneous kernel and why the syntax would be different than
inheriting from the homogeneous kernel.

- Johannes

On Tue, 2012-04-24 at 08:37 +0200, Sebastien Loriot (GeometryFactory)
wrote:
> On 04/23/2012 02:55 PM,
>
> wrote:
> > I'm trying the add one property to the point class.
> >
> > By help from StackOverflow I was directed to Manual Chapter 11.5
> > Extensible
> > Kernel using this I wrote the code below.
> >
> > The code will not compile and I get the error:
> > ‘typename CGAL::Extended_homogeneous::Base’ names
> > 'CGAL::Extended_homogeneous::Base’, which is not a class template|
> >
> > == CODE ==
> > #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_> >
> > {};
> >
> > #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;
> > }
> > ====
> >
> > If the inhertiance is changed to "public K_Base::Base::template
> > B<K_>::Type" it
> > will compile but Then I miss the propeties from Extentensions I guess?
> > Because
> > I get the error "Constructor not available for this kernel" when I run the
> > program.
>
> The point constructors are not changed by this mechanism. This means
> that only those documented are available. If you want to initialize your
> extra data, you need to first create an object of type My_point and then
> init a point of type MyKernel::Point_3 with it.
>
> The class in the kernel is a kind of interface while My_point is the
> representation.
>
> Sebastien.
>
>
>
>





Archive powered by MHonArc 2.6.16.

Top of Page