The C++ binding uses this lower layer to define a function called VImage:: which can call any libvips operator with a not-varargs set of variable arguments.
call()
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::, or use the member functions on call()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.