I have a simple c/c++ app that has an optional TCL interpreter with the function wrappers generated using SWIG. For several of the functions all the arguments are optional. How is this typically handled? I’d like to support a TCL command like this, where any of the arguments are optional but the C function takes fixed arguments:
//TCL command
get_list [options] filename
-opt1
-opt2
-opt3 arg1
-opt4 arg2
filename
//C function
static signed get_list(bool opt1,
bool opt2,
char * arg1,
objectType * arg2,
char * fileName)
Currently I have something like this:
static pList * get_list(char * arg1=NULL,
char * arg2=NULL,
char * arg3=NULL,
tObject * arg4=NULL)
This has many problems such as enforcing the object pointer is always the last argument. The SWIG documentation talks at length about C functions with variable arguments using “…” but I don’t think this is what I need. I’d like the C function arguments to be fixed.
The easiest method is to wrap a Tcl procedure around the outside, like this:
If you’ve got Tcl 8.6, that last handoff is best done with
tailcallso the rewriting code is cut out of the Tcl stack. It’s not vital though, as SWIGged code rarely resolves names of Tcl commands and variables.