replacing OUString::valueOf(static_cast<sal_Int32>) ??
Michael Stahl
mstahl at redhat.com
Wed Jan 9 08:45:28 PST 2013
On 09/01/13 17:02, Lubos Lunak wrote:
> On Wednesday 09 of January 2013, Michael Meeks wrote:
>> On Wed, 2013-01-09 at 16:10 +0200, Noel Grandin wrote:
>>> maybe we need
>>> OUString::valueOfInt32(sal_Int32)
>>> that does the cast for us?
>>>
>>> At least it'll be less noisy,
>
> Is there really such a big difference between
> OUString::valueOf( sal_Int32( 0 ))
> and
> OUString::valueOfInt32( 0 )
it has the advantage of being explicit in what type it expects; however
i actually think that is quite irrelevant for a Integer-to-String
conversion (as opposed to a -to-binary conversion); are there any use
cases where converting to a "too big" integer type would mess up the result?
so it would probably be an improvement, but a small one.
>> Looks less error prone to me; doesn't suffer from odd side-effects of
>> un-related type changes as badly either;
>
> What makes you think so? Having the type directly in the function name is
> almost the same like the explicit cast. If you cast incorrectly, you'll just
> as well get incorrect implicit cast when calling the function renamed
> function.
but you'll at least implicitly cast the same way on all platforms (since
the sal types don't map to arbitrary types, but to types of a particular
size).
>> hopefully fixes the perennial
>> 64bit vs. 32bit issues. Can be in-lined to produce ~identical code, we
>> could deprecated the old valueOf() methods just to beef up the idea that
>> we're continuing to evolve the sal API ;-)
>>
>> Any profound objections ? [ not that I've time to do it myself of
>> course ].
>
> Uhm, but we already have more than enough Hungarian notation all over the
> place. If the API is to evolve, it should not do so by going backwards :(.
>
> What I think would work better would be having overloads for each
> integer[***]/float type (or a template), all of them still named valueOf().
> That means one wouldn't need to bother with what the type actually is and the
> functions would just do the right thing (well, as long as the type is not
> sal_uInt8 or sal_uInt16, since, SAL types madness striking again, those are
> actually sal_Bool resp. sal_Unicode).
i don't like that idea, actually because there are already valueOf
overloads for integral types sal_Bool and sal_Unicode that do something
other than produce a string representation of an integer value, which
seems wrong to me to begin with.
better to add a new overloaded function, say valueOfInt, and have
overloads for all possible C++ integral types, all of which produce
strings with numbers. using that consistently would also solve the
problem of accidentally calling valueOf(a_sal_uInt16) and getting
surprising results.
only question is what to do about the "radix" parameter which is
supported by sal_Int32 and sal_Int64 parameters currently... likely it's
not needed often?
More information about the LibreOffice
mailing list