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