Questions about getCppuType

Stephan Bergmann sbergman at redhat.com
Wed May 7 05:24:52 PDT 2014


On 05/05/2014 09:07 AM, sberg wrote:
> On 04/25/2014 11:06 PM, julien2412 [via Document Foundation Mail
> Archive] wrote:
>  > I've begun to replace some parts and had this when I've changed this:
>  > else if ( pType == ::getCppuType((const sal_uInt16*)0) )
>  > into this:
>  > else if ( pType == cppu::UnoType<const sal_uInt16>::get() )
>
> That's the problem with getCppuType, that sal_uInt16 (representing UNO
> UNSIGNED SHORT) and sal_Unicode (representing UNO CHAR) can be typedefs
> for one and the same type, so getCppuType arbitrarily has to decide for
> one of those.
>
> With cppu::UnoType, instead use cppu::UnoUnsignedShortType and
> cppu::UnoCharType as template arguments, respectively.

And for completeness:  Use cppu::UnoSequenceType<> instead of 
css::uno::Sequence<> when the (recursive) element type is one of those 
special UnoUnsignedShortType/UnoCharType.  (Cf. 
<http://cgit.freedesktop.org/libreoffice/core/commit/?id=127a5f5e12d33203f871ee810e4b7ef557b7764b> 
"Sequence<UnoUnsignedShortType> -> UnoSequenceType<UnoUnsignedShortType>.")

(And, finally, css::uno::Reference<> is redundant there, so

   cppu::UnoType<XComponentContext>::get()

is shorthand for

   cppu::UnoType<Reference<XComponentContext>>::get()

and probably preferable.)

Stephan


More information about the LibreOffice mailing list