The last time I checked, C++ had stricter type checking. But yes, I am
recommending a C-style interface.
On 24/08/07, David McNab <[EMAIL PROTECTED]> wrote:
>
> On Fri, 2007-08-24 at 12:41 +0800, Martin Ellison wrote:
> > C and C++ have a large common subset; perhaps you could use that.
>
> Haha, nice one :)
>
> The common subset between C and C++ is pretty much C, isn't it?
>
> Cheers
> David
>
> PS - shouldn't give up on the basic OO of C++. OO is not a panacea for
> large projects, but if well used can take away a lot of pain.
>
> > On 24/08/07, David McNab <[EMAIL PROTECTED]> wrote:
> > On Thu, 2007-08-23 at 19:57 +0000, Mark Carter wrote:
> > > It's also why I'm trying to convince people to stop using C
> > ++ - C is
> > > just easier to interface with.
> >
> > I find it way easier to wrap over C than C++, but with the
> > cost of
> > implementing stuff in C just to benefit wrapping, it's like
> > the tail
> > trying to wag the dog.
> >
> > C++, if done right, offers enormous programming leverage:
> > - more readable code
> > - more maintainable code
> > - get more done in much less lines
> > - easy to extend
> > - eliminates a lot of menial and 'yak shaving' boilerplating
> > - create very satisfying and intuitive abstractions
> >
> > But there's the wrapping problem - and admittedly C++ is a
> > hell of a lot
> > harder to wrap than C.
> >
> > There are two solutions:
> >
> > 1. Throw the header files at SWIG. By default, SWIG creates a
> > plain-C
> > wrapper that in many cases Just Works (TM). It's not hard
> > to dress
> > up this layer within the scripting language, eg neat
> > classes
> > done as Pyrex extension classes for the Python wrapper. Or
> > in FICL,
> > do thin primitives over the top of the plain-C wrapper,
> > then
> > write some nice Forth words to get the desired
> > abstraction.
> >
> > or
> >
> > 2. Hand-code a C wrapper on top. Pass all object instances
> > in/out as
> > opaque void pointers. Write attribute getter and setter
> > funcs and
> > method dispatchers.
> >
> > Example:
> >
> > class Fred {
> >
> > Fred();
> > ~Fred();
> > int foo;
> > char *bar(float f);
> > }
> >
> > wraps in C as:
> >
> > extern "C" {
> >
> > void *Fred_new() {
> > return (void *)(new Fred());
> > }
> >
> > void Fred_del(void *pFred) {
> > ((Fred *)pFred)->~Fred();
> > }
> >
> > int Fred_get_foo(void *pFred) {
> > return ((Fred *)pFred)->foo;
> > }
> >
> > void Fred_set_foo(void *pFred, int foo) {
> > ((Fred *)pFred)->foo = foo;
> > }
> >
> > char *Fred_bar(void *pFred, float f) {
> > return ((Fred *)pFred)->bar(f);
> > }
> >
> > }
> >
> >
> > Cheers
> > David
> >
> >
> >
> >
> > _______________________________________________
> > Cinelerra mailing list
> > [email protected]
> > https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra
> >
> >
> >
> > --
> > Regards,
> > Martin
> > ([EMAIL PROTECTED])
> > IT: http://methodsupport.com Personal: http://thereisnoend.org
>
>
> _______________________________________________
> Cinelerra mailing list
> [email protected]
> https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra
>
--
Regards,
Martin
([EMAIL PROTECTED])
IT: http://methodsupport.com Personal: http://thereisnoend.org