[Development] Deprecating QString::{v,}sprintf()

BRM bm_witness at yahoo.com
Tue Feb 21 20:36:38 CET 2012


> From: Olivier Goffart <olivier at woboq.com>
> On Tuesday 21 February 2012 14:03:26 Marc Mutz wrote:
>>  On Tuesday February 21 2012, Marc Mutz wrote:
>>  > On Tuesday February 21 2012, Marc Mutz wrote:
>>  > > Hi,
>>  > > 
>>  > > The QString header contains a ### about removing sprintf() in 
> 5.0, but
>>  > > it's still there. I'd like to deprecate them.
>>  > > 
>>  > > I have a long-standing hate of the fact that QString::sprintf() 
> is not
>>  > > static, so my preferred solution would be to make it static, but 
> that
>>  > > silently breaks existing usage other than the idiomatic
>>  > > QString().sprintf().
>>  > > 
>>  > > Unless there's a clever technique by which we can at 
> compile-time catch
>>  > > non-static uses of sprintf(), I'd propose to just deprecate 
> it.
>>  > 
>>  > Actually, I just found GNU's asprintf() extension 
> ("allocated-string
>>  > printf"), arguably a better name for QString::sprintf() anyway. 
> So I'll
>>  > upload a patch to Gerrit that will:
>>  > 
>>  > 1. Deprecate QString{v,}sprintf()
>>  > 2. Add static QString::{v,}asprintf()
>> 
>>  https://codereview.qt-project.org/#change,17062
>> 
>>  The patch also nicely highlights how and where QString().sprintf() is used
>>  in Qt itself, because it adjusts all callers.
>> 
>>  Before vetoing the patch on the grounds of C-style API, please remember 
> that
>>  this functionality is required for qDebug() and that we want to keep SiC as
>>  much as possible for 5.0. A C++11-style framework is a lot more work, and
>>  not something I'd expect to land in 5.0.
>> 
>>  My main drive is the embarrassment of having sprintf not static.
> 
> Is that so much of a problem of it non being static?
> Why not just keeping it as it is?

Doesn't matter to me.
 
> (else, you could also deprecate it from the public API, but keep it in the 
> private API for qDebug)

I know of someone who (while not a Qt programmer) do like to have that kind of stuff built-in to string functionality.
He even made an argument for not using std::string (or std::wstring) simply on those grounds; and we ended up
with a lot of MFC CString cruft because of it.

Having something that does the work of {v,s,sn,a}prinf() is very useful to have.
The tr().arg() functionality while useful, does not satisfy quite all needs - its much easier to format using {v,s,sn,a}prinf()
than tr().arg() (or QString().arg()).

$0.02

Ben



More information about the Development mailing list