the question is about CvArr* in OpenCV

it is defined in the source like this

/* CvArr* is used to pass arbitrary
 * array-like data structures
 * into functions where the particular
 * array type is recognized at runtime:
 */
typedef void CvArr;

and documentation like this

CvArr

struct CvArr

This is the “metatype” used only as a function parameter. It denotes that the function accepts arrays of multiple types, such as IplImage*, CvMat* or even CvSeq* sometimes. The particular array type is determined at runtime by analyzing the first 4 bytes of the header. In C++ interface the role of CvArr is played by InputArray and OutputArray.

I'm writing my libraries documentation  so i was wondering when i show my function definition as in c below

CvMat* cvGetCol(const CvArr* arr, CvMat* submat, int col)

How i would do it ?
since CvMat is a struct i so far have this but is it the best it could be

(get-cols (arr  cv-arr) (:pointer (:struct submat)) (col :int))

but how would someone more skilled in cffi write the int part(col) and the CvArr part.  In my library CvArr* is defined as this (defctype cv-arr :pointer)....I would appreciate any help on this