On 04/30/2013 05:55 PM, Thorsten Behrens wrote:
On 04/25/2013 10:35 AM, Noel Grandin wrote:
I want to change things so that I can write:
   void bar() {
       Reference<B> b = ....
       methodThatTakesA( b );
   }

Yeah. One of my older pet peeves...

Stephan Bergmann wrote:
This has been discussed before more than once, but I tend to forget
whether it has never gone past discussion stage because the
implementation would be slightly tricky (using SFNIAE to restrict
implicit conversions from Reference<B> to Reference<A> to cases
where B is derived from A) or because there was some fundamental
flaw with it.

Works by and large with the proof of concept from

  https://gerrit.libreoffice.org/#/c/3698/

, the only problem I recall, is a slight performance degradation,
since IIRC then operator Reference<XInterface>& needs to go due to
ambiguities (which avoids temporaries). Possibly offset nicely by
needing much less queryInterfaces...

So I came up in parallel with <https://gerrit.libreoffice.org/#/c/3699/> that does not require to include Boost headers in URE headers (though at the expense of borrowing some concepts from boost::is_base_and_derived, ultimately to be cleaned up with C++11 std::is_base_of), coexists happily with the Reference<XInterface> conversion operator, doesn't require changes all over the place (compared to Noel's <https://gerrit.libreoffice.org/#/c/3613/> I started it off from), doesn't use queryInterface internally (but thus doesn't support ambiguous up-casts in MI scenarios).

I'm giving it a try currently on the gerrit bulidbots (and will be back next Monday to discuss further).

Stephan

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to