From: SourceForge.net <no...@so...> - 2007-10-19 22:11:11
|
Bugs item #1794247, was opened at 2007-09-13 13:58 Message generated for change (Comment added) made by qwertie You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1794247&group_id=1645 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: csharp Group: None Status: Closed Resolution: Invalid Priority: 5 Private: No Submitted By: David Piepgrass (qwertie) Assigned to: William Fulton (wsfulton) Summary: csbase typemap should only affect base classes Initial Comment: An unnecessary warning comes out of this code: %typemap(csbase) SWIGTYPE "CppWrapper" class A {}; class B : public A{}; 1>swig.i(59): Warning(833): Warning for B proxy: Base CppWrapper ignored. Multiple inheritance is not supported in C#. ---------------------------------------------------------------------- >Comment By: David Piepgrass (qwertie) Date: 2007-10-19 16:11 Message: Logged In: YES user_id=171344 Originator: YES I'm not following. Why would somebody want 'B' to have any base class other than 'A'? Even if a warning is appropriate, I think it should be a different warning... something like 'Warning: Base CppWrapper will not be used on derived classes unless you use the replace="1" flag on the csbase typemap' ---------------------------------------------------------------------- Comment By: William Fulton (wsfulton) Date: 2007-10-19 15:55 Message: Logged In: YES user_id=242951 Originator: NO There is a bug when using %typemap(csbase, replace="1") on derived classes which generated uncompileable code. This is fixed now and is the solution you can use to remove that warning. The warning is intentional as it highlight a particular potential problem in the commonly used scenario of giving all proxy classes a common pure C# base. See new testcase inherit_target_language.i. ---------------------------------------------------------------------- Comment By: David Piepgrass (qwertie) Date: 2007-10-02 16:06 Message: Logged In: YES user_id=171344 Originator: YES What? Come on, think about it for a minute. The csbase typemap, as its name implies, affects only the C# base class, not the C++ base class. In my C++ code I only use single inheritance and in the C# code I obviously intend to use single inheritance. Clearly, the csbase typemap should only apply to A, not B. Giving that warning in this situation is just silly. It should be reserved for cases of C++ code that has multiple base classes. Or look at it this way. You have these pairs of typemaps: csinterfaces and csinterfaces_derived; csbody and csbody_derived. Why do you have these separate typemaps? It's because base classes and derived classes have different needs. Likewise in this case. I would suggest there should be csbase and csbase_derived typemaps too, except that csbase_derived has no reason to exist, and that just leaves csbase. ---------------------------------------------------------------------- Comment By: William Fulton (wsfulton) Date: 2007-10-02 14:20 Message: Logged In: YES user_id=242951 Originator: NO You have explicitly added an additional base class to B so the warning is correct. If you don't like it, then suppress it, eg: %warnfilter(833) B; or %warnfilter(833); or use the warning name, eg %warnfilter(SWIGWARN_CSHARP_MULTIPLE_INHERITANCE); Also note the replace attribute which will replace the real base class with this one: %typemap(csbase, replace="1") SWIGTYPE "CppWrapper" Also if CppWrapper is an interface, use csinterfaces instead: %typemap(csinterfaces) SWIGTYPE "CppWrapper" %typemap(csinterfaces_derived) SWIGTYPE "CppWrapper" ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1794247&group_id=1645 |