Thanks again to Daniel and the other folks who replied.  I think I've got my basic C++ overloaded functions mapped into CLOS. Horray!<br><br>One caveat though:  Except for the overloaded C++ constructors.  Yikes!   Is it possible to overload constructors in CLOS? (So that one ctor takes zero arguments, and another takes two args, for example).  When I try, it doesn't work.<br>
<br>Here is what I'm trying, without much success. If I try to defie a 2nd initialize-instance method, it seems to erase the first.<br><br>Suggestions welcome(!)<br><br>- Jason<br><br>;; specific example<br>(require 'cffi)<br>
(shadowing-import 'cffi:defcallback)<br>(use-package :cffi)<br><br>; // declare a C++ class with overloaded constructor.<br>; // in overctor.h:<br>; class Vlad {<br>;  public:<br>;   Vlad(int a, double d);<br>;   Vlad();<br>
; };<br>; // in overctor.cpp<br>; Vlad::Vlad(int a, double d) { printf("Vlad(int,double) ctor called\n"); }<br>; Vlad::Vlad() { printf("Vlad() ctor called\n"); }<br>;<br>; build library with SWIG and g++ using:<br>
;<br>; swig -cffi -c++  overctor.i<br>; g++ -c overctor_wrap.cxx -fpic -o overctor_wrap.o<br>; g++ -c overctor.cpp      -fpic -o overctor.o<br>; g++ -shared overctor.o overctor_wrap.o -o overctor.so<br><br><br>; load the library<br>
(:cd "/home/jaten/dj/overctor")<br>(open-shared-library "./overctor.so")<br><br><br>; declare the C functions that should get called by the CLOS initializers<br>(cffi:defcfun ("_wrap_new_Vlad__SWIG_0" new_Vlad__SWIG_0) :pointer<br>
  (a :int)<br>  (d :double))<br><br>(cffi:defcfun ("_wrap_new_Vlad__SWIG_1" new_Vlad__SWIG_1) :pointer)<br><br>(cl:export 'new_Vlad__SWIG_0)<br>(cl:export 'new_Vlad__SWIG_1)<br><br>; test them<br><br>; ? (new_Vlad__SWIG_0 3 4.0d0 )<br>
; Vlad(int,double) ctor called<br>; #<A Foreign Pointer #xE363C0><br>; ?<br><br>; ? (new_Vlad__SWIG_1 )<br>; Vlad() ctor called<br>; #<A Foreign Pointer #xE363E0><br>; ? <br><br>; they work fine. Now try to get the CLOS wrapper stuf working.<br>
<br><br>; declare CLOS class<br><br>(cl:defclass Vlad ()<br>  ((ff-pointer :reader ff-pointer)))<br><br>(cl:export 'Vlad)<br><br>; this works:<br>(cl:defmethod initialize-instance :after ((obj Vlad) &key (a cl:integer) (d cl:number))<br>
  (setf (slot-value obj 'ff-pointer) (new_Vlad__SWIG_0 a d)))<br><br>(setf o2 (make-instance 'Vlad :a 2 :d 1.0d0))<br>; returns:<br>; Vlad(int,double) ctor called<br>; #<Vlad #x30200144DF7D><br><br><br>(cl:defmethod initialize-instance :after ((obj Vlad) &key)<br>
  (setf (slot-value obj 'ff-pointer) (new_Vlad__SWIG_1)))<br><br>(setf o  (make-instance 'Vlad))<br>; returns:<br>; Vlad() ctor called<br>; #<Vlad #x30200147E3BD><br><br>(setf o3 (make-instance 'Vlad :a 2 :d 1.0d0))<br>
; returns:<br>; <br>; > Error: :a is an invalid initarg to initialize-instance for #<standard-class Vlad>.<br>; >        Valid initargs: nil.<br>; > While executing: ccl::check-initargs, in process listener(1).<br>
;<br>; ????? what to try?<br><br><br>