Compiled language which can call C

The C++ binding uses this lower layer to define a function called VImage::call() which can call any libvips operator with a not-varargs set of variable arguments.

A small Python program walks the set of all libvips operators and generates a set of static bindings. For example:

VImage VImage::invert( VOption *options )
{
    VImage out;

    call( "invert", (options ? options : VImage::option()) ->
        set( "in", *this ) ->
        set( "out", &out ) );

    return( out );
}

So from C++ you can call any libvips operator (though without type-safety) with VImage::call(), or use the member functions on VImage to get type-safe calls for at least the required operator arguments.

The VImage class also adds automatic reference counting, constant expansion, operator overloads, and various other useful features.