Common lisp 如何在CFFI中存储元对象的输出

Common lisp 如何在CFFI中存储元对象的输出,common-lisp,cffi,Common Lisp,Cffi,我有一个标量函数,它是上面注释的两个函数定义的包装器。 我的?如何记忆(标量1 2 3 4)的输出,即# 我认为#被称为元对象 ;; Scalar* cv_create_Scalar(double val0, (double val1, double val2, double val3) (defcfun ("cv_create_Scalar" %scalar) scalar (val0 :double) (val1 :double) (val

我有一个标量函数,它是上面注释的两个函数定义的包装器。 我的?如何记忆
(标量1 2 3 4)
的输出,即
#
我认为
#
被称为元对象

    ;; Scalar* cv_create_Scalar(double val0, (double val1, double val2, double val3)
    (defcfun ("cv_create_Scalar" %scalar) scalar
      (val0 :double)
      (val1 :double)
      (val2 :double)
      (val3 :double))


    (define-foreign-type scalar ()
      ((garbage-collect  :reader garbage-collect :initform nil :initarg 
                         :garbage-collect))
      (:actual-type :pointer)
      (:simple-parser scalar))


    (defclass cv-scalar ()
      ((c-pointer :reader c-pointer :initarg :c-pointer)))


    (defmethod translate-to-foreign ((lisp-value cv-scalar) (c-type scalar))
      (c-pointer lisp-value))


    (defmethod translate-from-foreign (c-pointer (c-type scalar))
      (let ((scalar (make-instance 'cv-scalar :c-pointer c-pointer)))
        (when (garbage-collect c-type)
          (tg:finalize scalar (lambda () (del-scalar c-pointer))))
        scalar))

如果您按照上面的方式定义了defclass和defmethods,那么您可以运行
(mem aref(c指针a):int 1)
来返回mem aref值