conversion operators for UNO
Stephan Bergmann
sbergman at redhat.com
Thu Apr 25 04:58:05 PDT 2013
On 04/25/2013 10:35 AM, Noel Grandin wrote:
> I would like to discuss the addition of conversion operators for UNO.
> Let me start with an example.
> If we have IDL that looks like:
> interface A {}
> interface B : A {}
>
> Then we typically have C++ code that looks like
> void foo(Reference<A> a)
> void bar() {
> Reference<B> b = ....
> methodThatTakesA( Reference<A>(b, UNO_QUERY_THROW) );
> }
>
> I want to change things so that I can write:
> void bar() {
> Reference<B> b = ....
> methodThatTakesA( b );
> }
> and have the code automagically perform the B to A conversion
>
> Is there some reason this would not be desirable?
>
> (I'll leave the question as to whether or not is implementable for later
> :-)
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.
Implementing it via a direct upcast (rather than queryInterface) would
fail for ambiguities resulting from MI (like C deriving from B1 and B2,
each deriving from A, and trying to convert Reference<C> to
Reference<A>), and then there's the special case of requiring explicit
queryInterface(XInterface) for UNO object equality testing, but apart
from that I cannot think of any problems off the top of my head.
Stephan
More information about the LibreOffice
mailing list