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: Wed, 25 Apr 2012 09:50:20 +0200

Hello again,
No the code is not compiling when I inherit from Extended_Homogeneous,
only when I Inherit from Homogeneous. The difference I could work out
in the code was that the a base struct was defined for Homogeneous but
not for Extended_homogeneous. And the way inheritance is shown in the
manual is via this base struct.

- Johannes.


On Wed, 2012-04-25 at 08:45 +0200, Sebastien Loriot (GeometryFactory)
wrote:
> I am not sure to understand your question, the code you posted was
> correct and was compiling, isn't?
>
> Sebastien.
>
> On 04/24/2012 12:54 PM, Johannes Ulen wrote:
> > 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