From: William S F. <ws...@fu...> - 2006-10-19 22:37:56
|
I mentioned that it is in cvs. You can try it out now: http://www.swig.org/cvs.html. I put the fixes in place for both Java and C#, so it looks like you owe me a pint :) William Marc Lepage wrote: > Is this capability (C++ multiple inheritance to Java interfaces) still > on track for the next release? > > Critically for my use, is it also going to work for C#? > > -----Original Message----- > From: swi...@li... > [mailto:swi...@li...] On Behalf Of William S > Fulton > Sent: Monday, October 16, 2006 4:19 PM > To: Dave Ludwig > Cc: Swig User List > Subject: Re: [Swig-user] Multiple interface inheritance C++ and Java > > Dave Ludwig wrote: >> >> William S Fulton wrote: >>> Dave Ludwig wrote: >>> >>>> Is it possible for SWIG to correctly interpret C++ classes as >>>> interfaces, and thereby allow a class to multiply inherit from them > in Java? >>>> In C++ I have the following. Can I use a certain keyword in SWIG to > >>>> define the first 2 classes as interfaces, allowing the 3rd to > inherit >>>> from both? >>>> >>>> class IRemoteSyncIO >>>> { >>>> public: >>>> virtual ~IRemoteSyncIO () {} >>>> protected: >>>> IRemoteSyncIO () {} >>>> >>>> private: >>>> IRemoteSyncIO (const IRemoteSyncIO&); >>>> IRemoteSyncIO& operator= (const IRemoteSyncIO&); >>>> }; >>>> >>>> >>>> class IRemoteAsyncIO >>>> { >>>> public: >>>> virtual ~IRemoteAsyncIO () {} >>>> protected: >>>> IRemoteAsyncIO () {} >>>> >>>> private: >>>> IRemoteAsyncIO (const IRemoteAsyncIO&); >>>> IRemoteAsyncIO& operator= (const IRemoteAsyncIO&); >>>> }; >>>> >>>> class RemoteMpe : public IRemoteSyncIO, public IRemoteAsyncIO >>>> { >>>> ... >>>> } >>>> >>>> >>> This should be possible, but hasn't been implemented. Meanwhile you > can >>> work around this using the javainterfaces typemap. You can find some >>> examples in the Examples/test-suite directory and the *_runme.java > files >>> in the Examples/test-suite/java subdirectory. >>> >>> William >>> >>> >>> >> I've been looking through those directories and reading about typemaps >> for a while. I don't feel like I'm any closer to working this out. > The >> reason probably being I've only been using SWIG for a week or so. But > I >> need to determine if this is possible with SWIG in the short term if > we >> are going to move forward with it on this project. >> Could someone give a little more detail on how to do this? Or refer > me >> to a good example? >> > > You really have to jump over hoops right now to get things mapped to a > Java interface. It might be easier to do some manual wrapping instead. > However, if you want to know how to do it, I've shown an example below. > If you have many such classes, you can put some of this code into macros > for easier re-use. You'll need the cvs version of SWIG which will be the > basis of the next release (due in a week or two). > > William > > > /* File : example.i */ > %module example > > // Turn the proxy class into an interface > %typemap(javaclassmodifiers) IRemoteSyncIO "public interface"; > %typemap(javaclassmodifiers) IRemoteAsyncIO "public interface"; > %typemap(javabody) IRemoteSyncIO ""; > %typemap(javabody) IRemoteAsyncIO ""; > %typemap(javafinalize) IRemoteSyncIO ""; > %typemap(javafinalize) IRemoteAsyncIO ""; > %typemap(javadestruct) IRemoteSyncIO ""; > %typemap(javadestruct) IRemoteAsyncIO ""; > > // Turn the methods into abstract methods > %javamethodmodifiers IRemoteSyncIO::syncmethod "abstract public"; > %javamethodmodifiers IRemoteAsyncIO::asyncmethod "abstract public"; > %typemap(javaout) void IRemoteSyncIO::syncmethod ";" > %typemap(javaout) void IRemoteAsyncIO::asyncmethod ";" > > // Features are inherited by derived classes, so override this > %javamethodmodifiers RemoteMpe::syncmethod "public" > %javamethodmodifiers RemoteMpe::asyncmethod "public" > > // Modify multiple inherited base classes into inheriting interfaces > %typemap(javainterfaces) RemoteMpe "IRemoteSyncIO, IRemoteAsyncIO"; > %typemap(javabase, replace="1") RemoteMpe ""; > > > %inline %{ > class IRemoteSyncIO > { > public: > virtual ~IRemoteSyncIO () {} > virtual void syncmethod() = 0; > protected: > IRemoteSyncIO () {} > > private: > IRemoteSyncIO (const IRemoteSyncIO&); > IRemoteSyncIO& operator= (const IRemoteSyncIO&); > }; > > class IRemoteAsyncIO > { > public: > virtual ~IRemoteAsyncIO () {} > virtual void asyncmethod() = 0; > protected: > IRemoteAsyncIO () {} > > private: > IRemoteAsyncIO (const IRemoteAsyncIO&); > IRemoteAsyncIO& operator= (const IRemoteAsyncIO&); > }; > > class RemoteMpe : public IRemoteSyncIO, public IRemoteAsyncIO > { > public: > virtual void syncmethod() {} > virtual void asyncmethod() {} > }; > > %} > > > ------------------------------------------------------------------------ > - > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user > |