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

Reply via email to